我想知道这是否仍然适用于动态链接的可执行文件.
是:在动态加载过程中,截面not用于任何对象.
如本图所示,节标题表用于访问重定位节
这不是真的.要查找重新定位,使用PT_DYNAMIC
segment(包含.dynamic
部分).例如:
readelf -d /bin/date
Dynamic section at offset 0x1cdb8 contains 26 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x3000
0x000000000000000d (FINI) 0x15140
0x0000000000000019 (INIT_ARRAY) 0x1c1f0
0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
0x000000000000001a (FINI_ARRAY) 0x1c1f8
0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)
0x000000006ffffef5 (GNU_HASH) 0x3a0
0x0000000000000005 (STRTAB) 0xbc8
0x0000000000000006 (SYMTAB) 0x400
0x000000000000000a (STRSZ) 977 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x1cfe8
0x0000000000000002 (PLTRELSZ) 1584 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x2238
0x0000000000000007 (RELA) 0x10e0
0x0000000000000008 (RELASZ) 4440 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffffb (FLAGS_1) Flags: PIE
0x000000006ffffffe (VERNEED) 0x1040
0x000000006fffffff (VERNEEDNUM) 1
0x000000006ffffff0 (VERSYM) 0xf9a
0x000000006ffffff9 (RELACOUNT) 171
0x0000000000000000 (NULL) 0x0
这里,DT_PLTGOT
、DT_PLTRELSZ
、DT_RELA
、DT_RELASZ
等足以找到必要的重置表.