When using readelf on a simple android ndk binary I get section to segment mapping where sections seem to be mapped to multiple segments. E.g. .note.gnu.build-id, .note.android.ident, .eh_frame_hdr, .dynamic, .got, ...
What is the reason for that?
readelf libhellondk.so -lW
Elf file type is DYN (Shared object file)
Entry point 0xef30
There are 8 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0301d8 0x0301d8 R E 0x1000
LOAD 0x030d48 0x0000000000031d48 0x0000000000031d48 0x0032e0 0x003768 RW 0x1000
DYNAMIC 0x033aa0 0x0000000000034aa0 0x0000000000034aa0 0x0001f0 0x0001f0 RW 0x8
NOTE 0x000200 0x0000000000000200 0x0000000000000200 0x000024 0x000024 R 0x4
NOTE 0x030140 0x0000000000030140 0x0000000000030140 0x000098 0x000098 R 0x4
GNU_EH_FRAME 0x02b144 0x000000000002b144 0x000000000002b144 0x000e34 0x000e34 R 0x4
GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x10
GNU_RELRO 0x030d48 0x0000000000031d48 0x0000000000031d48 0x0032b8 0x0032b8 R 0x1
Section to Segment mapping:
Segment Sections...
00 .note.gnu.build-id .hash .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .plt .text .rodata .eh_frame_hdr .eh_frame .gcc_except_table .note.android.ident
01 .fini_array .data.rel.ro .dynamic .got .data .bss
02 .dynamic
03 .note.gnu.build-id
04 .note.android.ident
05 .eh_frame_hdr
06
07 .fini_array .data.rel.ro .dynamic .got