如图会出现 segmentation fault
,但是我并没有修改 addr
的表达式,为什么在这里出错了而 test0
并没有出错呢
在这种情况下,你需要填入地址的位置不变,而需要填入的内容变成了
re.sym
的value
再加上addend
。
如图会出现 segmentation fault
,但是我并没有修改 addr
的表达式,为什么在这里出错了而 test0
并没有出错呢
在这种情况下,你需要填入地址的位置不变,而需要填入的内容变成了
re.sym
的value
再加上addend
。
我也遇到了,需要将写入位置计算中的 textAddr 改成 textOff
随后,我们需要知道
RelocEntry
指示的需要修改的源代码的位置,这个值由re.offset
指示。而由于当前 object 在链接成可执行文件时,还包含若干其它.o,所以需要加上textAddr
,才能得到真正需要修改的地址。
就是这一句话中应该是加上 textOff 而不是 textAddr
然而为什么 test0 中可以通过?通过 gdb 调试看到,test0 中 textOff 和 textAddr 是相等的,因此可以通过
而在 test1 中这两个值并不相等
后续 test2 和 test3 不会到写入内存这一步,test4 和 test5 中 textAddr 和 textOff 都相等,使用 textOff 也能通过
不知道是实验指导中有误还是实验设计有误