首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逆向工程怀疑

逆向工程怀疑
EN

Stack Overflow用户
提问于 2011-04-23 18:02:19
回答 4查看 746关注 0票数 0
代码语言:javascript
复制
8048563:       e8 0d 00 00 00          call   8048575 <exit@plt+0x141>

为了好玩,我试图反向工程一个二进制文件,我在objdump输出中看到了这个调用。查看这一行,我认为调用将是对退出函数的调用,它是动态链接的。然而,8048575似乎是这个程序的.text部分中的一个地址!

  1. 为什么会发生这种错误的函数命名?
  2. 是调用所处的位置,有以下一行;为什么缺少函数序言?

代码语言:javascript
复制
8048575:       83 ec 6c                sub    esp,0x6c
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-25 19:22:04

这实际上不是IAT/PLT调用,而是对同一个文件中的另一个函数的调用。该文件可能已经删除了其内部符号,objdump将所有地址显示为地址+偏移之前最后定义的符号。如果没有内部符号,这将击中最后一个plt链接函数,因为plt部分位于文本之前。

因此,显示的名称只是伪造的,可以忽略。

票数 3
EN

Stack Overflow用户

发布于 2011-04-23 18:29:56

当程序调用共享库中的函数时,它调用过程链接表(PLT)中的地址。最初,PLT包含对动态链接器的调用,动态地查找函数地址,然后用找到的地址替换PLT中的地址。

票数 3
EN

Stack Overflow用户

发布于 2011-04-23 19:41:27

这是对IAT(导入地址表)条目的调用,这样它就可以对名为“exit`”的函数执行模块间调用(实际上是跳转),这样就可以避免远距离调用,并使动态链接变得更简单。至于“缺失”的序言,根本不需要设置堆栈帧,实际上大多数功能完全不需要设置堆栈,因此堆栈分配是序曲,唯一真正需要堆栈帧的函数是不受信任的“裸”程序集函数或对堆栈进行不可预知的更改的函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5765922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档