test1 的指导书问题

计算机系统导论 421 views 2 replies
#1 ·

test1 中并不存在 R_X86_64_32,

截屏 2024-05-20 下午 10.28.46
如图所示,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 完全一样。

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

test1 中并不存在 R_X86_64_32

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

请make clean后git pull origin master,再 make 就可以了。

语义不清

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

#3 ·

这个 gdb 怎么进啊