当我反汇编我的小函数时,我碰巧看到了这个调用
call 0xf60d2f47 <__i686.get_pc_thunk.bx>.
我不知道为什么在我的程序中需要这个调用。任何解释都会有帮助。
发布于 2011-07-13 14:04:35
此调用用于x86上与位置无关的代码中。它将代码的位置加载到%ebx
寄存器中,该寄存器允许访问全局对象(与代码具有固定偏移量)作为该寄存器的偏移量。
与位置无关的代码是可以在不同地址加载和执行的代码,无需修改。这对于链接到共享库的代码很重要,因为这些库可以在不同的进程中映射到不同的地址。
请注意,在x86-64上不需要等效的调用,因为该体系结构具有IP相对寻址模式(即,它可以直接寻址内存位置作为当前指令位置的偏移量)。
https://stackoverflow.com/questions/6679846
复制