__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