LINUX.ORG.RU

История изменений

Исправление 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