История изменений
Исправление vM, (текущая версия) :
В динамических ELF код не в секциях, а в сегментах. Если нет свободного места в Program Headers, можно попробовать завести свой исполняемый сегмент вместо GNU_STACK или другого пустого незагружаемого сегмента.
Но лучше не править бинарник, а попытаться управлять процессом динамической загрузки и связывания.
readelf -l /bin/sh
Elf file type is DYN (Shared object file)
Entry point 0x5cd0
There are 13 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040
0x00000000000002d8 0x00000000000002d8 R 0x8
INTERP 0x0000000000000318 0x0000000000000318 0x0000000000000318
0x000000000000001c 0x000000000000001c R 0x1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000004360 0x0000000000004360 R 0x1000
LOAD 0x0000000000005000 0x0000000000005000 0x0000000000005000
0x00000000000127f5 0x00000000000127f5 R E 0x1000
LOAD 0x0000000000018000 0x0000000000018000 0x0000000000018000
0x00000000000058f0 0x00000000000058f0 R 0x1000
LOAD 0x000000000001df30 0x000000000001ef30 0x000000000001ef30
0x0000000000001310 0x0000000000003f40 RW 0x1000
DYNAMIC 0x000000000001eb08 0x000000000001fb08 0x000000000001fb08
0x00000000000001f0 0x00000000000001f0 RW 0x8
NOTE 0x0000000000000338 0x0000000000000338 0x0000000000000338
0x0000000000000020 0x0000000000000020 R 0x8
NOTE 0x0000000000000358 0x0000000000000358 0x0000000000000358
0x0000000000000044 0x0000000000000044 R 0x4
GNU_PROPERTY 0x0000000000000338 0x0000000000000338 0x0000000000000338
0x0000000000000020 0x0000000000000020 R 0x8
GNU_EH_FRAME 0x0000000000019f44 0x0000000000019f44 0x0000000000019f44
0x0000000000000804 0x0000000000000804 R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10
Исходная версия vM, :
В динамических ELF код не в секциях, а в сегментах. Если нет свободного места в Program Headers, можно попробовать завести свой исполняемый сегмент вместо GNU_STACK или другого пустого незагружаемого сегмента.
Но лучше не править бинарник, а попытаться управлять процессом загрузки.
readelf -l /bin/sh
Elf file type is DYN (Shared object file)
Entry point 0x5cd0
There are 13 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040
0x00000000000002d8 0x00000000000002d8 R 0x8
INTERP 0x0000000000000318 0x0000000000000318 0x0000000000000318
0x000000000000001c 0x000000000000001c R 0x1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000004360 0x0000000000004360 R 0x1000
LOAD 0x0000000000005000 0x0000000000005000 0x0000000000005000
0x00000000000127f5 0x00000000000127f5 R E 0x1000
LOAD 0x0000000000018000 0x0000000000018000 0x0000000000018000
0x00000000000058f0 0x00000000000058f0 R 0x1000
LOAD 0x000000000001df30 0x000000000001ef30 0x000000000001ef30
0x0000000000001310 0x0000000000003f40 RW 0x1000
DYNAMIC 0x000000000001eb08 0x000000000001fb08 0x000000000001fb08
0x00000000000001f0 0x00000000000001f0 RW 0x8
NOTE 0x0000000000000338 0x0000000000000338 0x0000000000000338
0x0000000000000020 0x0000000000000020 R 0x8
NOTE 0x0000000000000358 0x0000000000000358 0x0000000000000358
0x0000000000000044 0x0000000000000044 R 0x4
GNU_PROPERTY 0x0000000000000338 0x0000000000000338 0x0000000000000338
0x0000000000000020 0x0000000000000020 R 0x8
GNU_EH_FRAME 0x0000000000019f44 0x0000000000019f44 0x0000000000019f44
0x0000000000000804 0x0000000000000804 R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10