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
完全一样”