test1 中并不存在 R_X86_64_32,
如图所示,type 为 0x2,仍然是 PC32.
语义不清
在此测试点中你仍然只需完成重定位,且仍只有一个源文件。不同的地方在于,此时重定位类型从
R_X86_64_PC32变成了R_X86_64_32:
这代表着此时可执行文件以非 PIE(position independent executable)形式编译,通过一个绝对地址而非 PC 相对访问。在这种情况下,你需要填入地址的位置不变,而需要填入的内容变成了re.sym的value再加上 addend。在代码框架中,handleRela接受的参数isPIE用来指示当前链接的目标文件是否启用了 PIE。
此外,由于我们使用一个函数访问了另一个函数,引入了另一种重定位类型R_X86_64_PLT32。它也使用 PC 相对寻址,所以在处理时与R_X86_64_32完全一样。
- 前两段都在表达
R_X86_64_32使用绝对寻址,最后一段“也使用相对寻址”,不知道也从何而来。 - 既然
R_X86_64_PLT32使用相对寻址,那又为什么“处理时与R_X86_64_32完全一样”
