LINUX.ORG.RU

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

Исправление pavlick, (текущая версия) :

.rodata and .rodata1
These sections hold read-only data

Полезно посмотреть на elf через readelf, это

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
                 0x0000000000000268 0x0000000000000268  R      0x8
  INTERP         0x00000000000002a8 0x00000000000002a8 0x00000000000002a8
                 0x000000000000001c 0x000000000000001c  R      0x1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x00000000000007e0 0x00000000000007e0  R      0x1000
  LOAD           0x0000000000001000 0x0000000000001000 0x0000000000001000
                 0x0000000000000325 0x0000000000000325  R E    0x1000
  LOAD           0x0000000000002000 0x0000000000002000 0x0000000000002000
                 0x0000000000000180 0x0000000000000180  R      0x1000
...

 Section to Segment mapping:
  Segment Sections...
   00
   01     .interp
   02     .interp .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt
   03     .init .plt .text .fini
   04     .rodata .eh_frame_hdr .eh_frame
...

т.е. как сегменты мепятся на процесс. Нет в них ничего мистического, разница лишь в флагах (RW…) + некторые Program Headers будут размещаться рандомно (ASLR). В общем-то tosol это всё говорил, но так наглядно и можно пощупать.

ЗЫ: в рантайме нет сегментов, остаются лишь Program Headers.

Исходная версия pavlick, :

.rodata and .rodata1
These sections hold read-only data

Полезно посмотреть на elf через readelf, это

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
                 0x0000000000000268 0x0000000000000268  R      0x8
  INTERP         0x00000000000002a8 0x00000000000002a8 0x00000000000002a8
                 0x000000000000001c 0x000000000000001c  R      0x1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x00000000000007e0 0x00000000000007e0  R      0x1000
  LOAD           0x0000000000001000 0x0000000000001000 0x0000000000001000
                 0x0000000000000325 0x0000000000000325  R E    0x1000
  LOAD           0x0000000000002000 0x0000000000002000 0x0000000000002000
                 0x0000000000000180 0x0000000000000180  R      0x1000
...

 Section to Segment mapping:
  Segment Sections...
   00
   01     .interp
   02     .interp .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt
   03     .init .plt .text .fini
   04     .rodata .eh_frame_hdr .eh_frame
...

т.е. как сегменты мепятся на процесс. Нет в них ничего мистического, разница лишь в флагах (RW…) + некторые Program Headers будут размещаться рандомно (ASLR). В общем-то tosol это всё говорил, но так наглядно и можно пощупать.