__x86.get_pc_thunk.ax


查看函数,内容如下(xchg %ax,%ax命令交换%ax与%ax,相当于nop):

00000559 <__x86.get_pc_thunk.ax>:
 559:  8b 04 24               mov    (%esp),%eax
 55c:  c3                     ret    
 55d:  66 90                  xchg   %ax,%ax
 55f:  90                     nop

简单来说,该函数的功能是将%eip寄存器内容传入%eax寄存器。相当于mov %eip,%eax。

这个函数在x86上的PIC(position independent code,即位置无关代码)中使用。它将%eip的位置加载到%eax寄存器中,从而实现对模块内部数据(例如全局变量)的访问。
原因是x86的指令集中没有直接读取%eip的指令。

类似的函数还有:__x86.get_pc_thunk.bx,__x86.get_pc_thunk.cx, __x86.get_pc_thunk.dx。
功能是类似的,只不过传入的寄存器分别为%ebx, %ecx, %edx。早期版本的编译器中,这个函数叫__i686.get_pc_thunk.ax。

在64位程序中不需要这个函数,因为指令集中可以直接获取%eip。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM