IDA 技巧(127)函数

admin 2025年5月1日13:48:06评论2 views字数 892阅读2分58秒阅读模式

在分析常规且格式良好的二进制文件时,通常可以依赖IDA的自动分析来正确创建函数并检测其边界。然而,有时IDA的猜测可能需要调整。

不返回的调用

一个例子是调用不返回的函数。假设IDA误将一个函数检测为不返回:

IDA 技巧(127)函数

但经过进一步分析,你意识到它实际上是返回的,并移除了不返回标志。然而,IDA已经在调用后截断了函数,现在你需要扩展它以包含调用后的代码。该怎么做呢?

重新创建函数

这可能是简单情况下最快的方法:

  1. 转到函数的起始位置(例如,通过双击函数列表中的函数),或通过按键序列CtrlPEnter
  2. 删除函数(从函数列表中),或CtrlPDel。如果你在图形视图中,IDA将切换到文本视图。
  3. 再次创建它(从上下文菜单中选择创建函数…),或按P

如果更改足以解决原始问题,这种方法效果很好。在逐个修复问题时,可能需要重复几次。请注意,删除函数可能会破坏附加在其上的一些信息(例如函数注释),因此这并不总是最佳选择。

编辑函数边界

编辑函数对话框有用于函数起始和结束地址的字段:

IDA 技巧(127)函数

它们可以被编辑以扩展或缩小函数,但有一些限制:

  1. 新的函数边界不能与另一个函数或函数块相交。它们也不能跨越段边界。
  2. 函数起始必须是一个有效的指令。

请记住,结束地址是排他的,即它是函数最后一条指令之后的地址。

更改函数结束

要仅移动当前或前一个函数的结束,可以使用快捷键E(设置函数结束)。如果当前地址有一个函数或块,它会被截断到刚好在当前指令之后。如果当前地址不属于一个函数,则最近的前一个函数或块会被扩展。如果扩展导致函数块紧邻在一起,它们会被合并。

例如,考虑这种情况:

IDA 技巧(127)函数

红色矩形中的指令应该是函数的一部分,但它们目前是“独立的”(这也可以通过地址前缀的颜色看出,它是棕色而不是函数内指令的黑色)。为了使它们成为函数的一部分,我们可以将其结束移动到最后一个指令(0027FD6A)。将光标放在那里并调用编辑 > 函数 > 设置函数结束(快捷键E)将函数结束从0027FD44移动到0027FD6A。因为这使函数与其自身的块相邻,IDA将块与函数合并,函数扩展以覆盖所有新可达的指令。

原文始发于微信公众号(二进制磨剑):IDA 技巧(127)函数

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月1日13:48:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   IDA 技巧(127)函数https://cn-sec.com/archives/4023605.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息