我现在了解如何通过过程链接表引用动态函数,如下所示:
Dump of assembler code for function foo@plt:
0x0000000000400528 <foo@plt+0>: jmpq *0x2004d2(%rip) # 0x600a00 <_GLOBAL_OFFSET_TABLE_+40>
0x000000000040052e <foo@plt+6>: pushq $0x2
0x0000000000400533 <foo@plt+11>: jmpq 0x4004f8
(gdb) disas 0x4004f8
No function contains specified address.
但我不知道动态变量是如何引用的,虽然我发现启动后值就填充在GOT中,但是没有像上面那样的存根,它是如何工作的?
动态加载器在将控制权转移到用户程序之前重新定位对变量的所有引用。
它们没有“存根”,因为一旦用户程序开始执行,加载程序就不可能重新获得控制权并更新变量地址。如果您不清楚这一点,那么您还没有really了解 PLT 延迟解析存根的工作原理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)