Re[2]: модификация elf, добавление сегмента+секции
От: Molchalnik  
Дата: 20.02.25 18:01
Оценка:
Здравствуйте, kov_serg, Вы писали:
  .
_>Здравствуйте, Molchalnik, Вы писали:

M>>Подскажите, пожалуйста, где я мог нахимичать при модификации elf?

_>До
  LOAD           0x001000 0x0000000000401000 0x0000000000401000 0x176231 0x176231 R E 0x1000
_>...
_>   01     .init .plt .text .fini 
_>

  .
_>После
_>
  LOAD           0x001000 0x0000000000401000 0x0000000000401000 0x176231 0x176231     0x1000
_>...
_>   01 
_>


а в чём проблема? я mprotect'ом при запуске ставлю права на исполнение и права на чтение этому сегменту назад

вот таким кодом

.coDDde:00000000005DE000 public start
.coDDde:00000000005DE000 start proc near
.coDDde:00000000005DE000 xor     rax, rax
.coDDde:00000000005DE003 mov     rdi, offset _init_proc ; start
.coDDde:00000000005DE00D mov     rdx, 5          ; prot
.coDDde:00000000005DE014 mov     rsi, 177000h    ; len
.coDDde:00000000005DE01E mov     rax, 0Ah
.coDDde:00000000005DE025 syscall                 ; LINUX - sys_mprotect
.coDDde:00000000005DE027 mov     rax, offset _start
.coDDde:00000000005DE031 jmp     rax
.coDDde:00000000005DE031 start endp
.coDDde:00000000005DE031
.coDDde:00000000005DE031 _coDDde ends


_init_proc — это чётко 0x401000, длина вроде на сегмент с округлением по страницам к верху... _start — это первоначальная точка входа, 0x0405e40. Переход осуществляется туда. Если бы не было прав на исполнение и чтение, segfault был бы на первой команде по адресу функции _start 0x0405e40, а доходит аш до 0x04ED09C
Отредактировано 20.02.2025 18:05 Molchalnik . Предыдущая версия . Еще …
Отредактировано 20.02.2025 18:03 Molchalnik . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.