从下面的代码片段中,我可以看到重定位条目将应用于某个部分的偏移量0x000000201018
,但是如何确定哪个部分?
我的所有部分都小于此偏移量。这意味着什么?
重定位:
Relocation section '.rela.plt' at offset 0x4f8 contains 1 entries:
Offset Info Type Sym. Value Sym. Name + Addend
000000201018 000300000007 R_X86_64_JUMP_SLO 0000000000000000 printk + 0
部分标题:
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
...
[ 6] .rela.plt RELA 00000000000004f8 000004f8
0000000000000018 0000000000000018 AI 3 21 8
...
[21] .got.plt PROGBITS 0000000000201000 00001000
0000000000000020 0000000000000008 WA 0 0 8
答案 0 :(得分:0)
在info
的{{1}}字段中指定了要应用重定位的部分。从问题中的示例elf开始,重定位节section headers
适用于节号.rela.plt
,即21
节。
偏移量字段对于目标文件和共享目标文件具有不同的含义。 “对于可重定位文件,该值是从该段的开头到受重定位影响的存储单元的字节偏移。对于可执行文件或共享对象,该值是受重定位影响的存储单元的虚拟地址。”
来源/更多信息:http://www.skyfree.org/linux/references/ELF_Format.pdf