在反汇编我的小函数的时候,正好看到了这个调用
call 0xf60d2f47 <__i686.get_pc_thunk.bx>.
我不知道为什么我的程序中需要这个调用。任何解释都会有所帮助。
最佳答案
此调用用于 x86 上的位置无关代码。它将代码的位置加载到 %ebx
寄存器中,这允许全局对象(与代码具有固定偏移量)作为该寄存器的偏移量进行访问。
与位置无关的代码是可以在不同地址加载和执行的代码,无需修改。这对于将链接到共享库的代码很重要,因为它们可以映射到不同进程中的不同地址。
请注意,在 x86-64 上不需要等效调用,因为该架构具有 IP 相对寻址模式(也就是说,它可以直接将内存位置寻址为与当前指令)。
关于c - 什么是 __i686.get_pc_thunk.bx?为什么我们需要这个电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6679846/