首页 > 试题广场 >

考虑目标文件m.o中对swap函数的调用(图7-5)。

[问答题]
考虑目标文件m.o中对swap函数的调用(图7-5)。

      9:  e8 00 00 00 00        callq e <main+Oxe>      swap()

      它的重定位条目如下:
      r.offset .0xa
      r.symbol=svap
      r. type  = R_X86_64. PC32
      r .addend= -4
      现在假设链接器将m.o中的.text重定位到地址0x4004d0,将swap重定位到地址0x4004e8。那么callq指令中对swap的重定位引用的值是什么?

R_X86_64_PC32是重定位一个使用32位PC相对地址的引用。 根据重定位PC相对引用的公式可以知道, refaddr = ADDR(s) + r.offset = ADDR(.text) + r.offset = 0x4004d0 + 0xa = 0x4004da; *refptr = (unsigned)(ADDR(r.symbol) + r.addend - refaddr) =(unsigned)(ADDR(swap) + r.addend - refaddr) = 0x4004e8 + (-4) - 0x4004da=0xa; 所以重定位引用的地址是0xa;
发表于 2020-06-18 14:55:52 回复(0)