test1 的指导书问题

test1 中并不存在 R_X86_64_32,


如图所示,type 为 0x2,仍然是 PC32.

语义不清

在此测试点中你仍然只需完成重定位,且仍只有一个源文件。不同的地方在于,此时重定位类型从 R_X86_64_PC32 变成了R_X86_64_32
这代表着此时可执行文件以非 PIE(position independent executable)形式编译,通过一个绝对地址而非 PC 相对访问。在这种情况下,你需要填入地址的位置不变,而需要填入的内容变成了 re.symvalue再加上 addend。在代码框架中,handleRela接受的参数isPIE 用来指示当前链接的目标文件是否启用了 PIE。
此外,由于我们使用一个函数访问了另一个函数,引入了另一种重定位类型 R_X86_64_PLT32。它也使用 PC 相对寻址,所以在处理时与R_X86_64_32 完全一样。

  1. 前两段都在表达 R_X86_64_32 使用绝对寻址,最后一段“使用相对寻址”,不知道从何而来。
  2. 既然 R_X86_64_PLT32 使用相对寻址,那又为什么“处理时与 R_X86_64_32 完全一样”
1 Like

test1 中并不存在 R_X86_64_32

这是实验框架的一个疏忽,感谢你的反馈。

make cleangit pull origin master,再 make 就可以了。

语义不清

感谢反馈,应为“与 R_X86_64_PC32 完全一样”,已修改。

这个 gdb 怎么进啊