so被加载的时候各个段以及header都会被加载到内存吧?
通过/proc/XXX/maps查看so的内存地址情况的时候对应关系是什么呢?header会被加载到什么地方?
比如/proc/XXX/maps的输出如下:
root@mako:/proc/13090 # cat maps | grep "libtest.so"
73187000-7318a000 r-xp 00000000 b3:17 309538 /data/app-lib/com.example.test-2/libtest.so
7318a000-7318b000 r--p 00002000 b3:17 309538 /data/app-lib/com.example.test-2/libtest.so
7318b000-7318c000 rw-p 00003000 b3:17 309538 /data/app-lib/com.example.test-2/libtest.so
libtest.so的程序头如下:
程序头:
Type Offset VirtAddr PhysAddr FileSiz MemSiz *** Align
PHDR 0x000034 0x00000034 0x00000034 0x000e0 0x000e0 R 0x4
LOAD 0x000000 0x00000000 0x00000000 0x026d7 0x026d7 R E 0x1000
LOAD 0x002e74 0x00003e74 0x00003e74 0x00190 0x00190 RW 0x1000
DYNAMIC 0x002e84 0x00003e84 0x00003e84 0x00100 0x00100 RW 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0
EXIDX 0x002548 0x00002548 0x00002548 0x000e0 0x000e0 R 0x4
GNU_RELRO 0x002e74 0x00003e74 0x00003e74 0x0018c 0x0018c RW 0x4
Section to Segment mapping:
段节...
00
01 .dynsym .dynstr .hash .rel.dyn .rel.plt .plt .text .mytext .ARM.extab .ARM.exidx .rodata
02 .fini_array .init_array .dynamic .got .data
03 .dynamic
04
05 .ARM.exidx
06 .fini_array .init_array .dynamic .got
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)