x86 指令如何调用 135b<__x86.get_pc_thunk.ax> 工作?

逆向工程 部件 x86
2021-06-22 21:33:36

我认为以下指令用于位置无关代码。任何人都可以帮助我了解它是如何工作的吗?

call 135b<__x86.get_pc_thunk.ax>

返回后下面的说明有什么用?

add    eax,0x2d77
mov    edx,DWORD PTR [eax-0xc]
mov    edx,DWORD PTR [edx]

使用 GCC 编译代码时,是否可以从程序集中删除 call 135b<__x86.get_pc_thunk.ax> ?

谢谢你。

在此处输入图片说明

1个回答

调用正在获取 eax 中的下一条指令地址,
注意 ax
有此调用的其他变体,末尾有 bx、cx、dx
,分别返回 ebx、ecx 和 edx 中的下一条指令地址

135b 的电话看起来像

mov eax,[esp] 
ret

所以在你的特定情况下 eax 将包含 0x1289
后添加 eax 将包含 0x4000
所以 edx 将获得存储在 [3ff4] 的内容

这称为解引用指针 **foo

基本上 eax 将包含 fscanf 存储的缓冲区 返回
edx 将包含格式字符串
ecx 将包含 FILE*