Информация об изменениях

Сообщение Re[2]: модификация elf, добавление сегмента+секции от 20.02.2025 18:01

Изменено 20.02.2025 18:03 Molchalnik

Re[2]: модификация elf, добавление сегмента+секции
Здравствуйте, 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 был бы на первой команде по адресу 0x0405e40, а доходит аш до 0x04ED09C
Re[2]: модификация elf, добавление сегмента+секции
Здравствуйте, 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 был бы на первой команде по адресу 0x0405e40, а доходит аш до 0x04ED09C