IDA 技巧(68) 可跳过指令

admin 2024年11月7日12:50:25评论38 views字数 970阅读3分14秒阅读模式

在编译代码中,有时会发现一些指令并不直接代表程序员编写的代码,而是由编译器为了自身目的或程序执行环境的要求而添加的。

可跳过指令的种类

编译函数通常在开始时有序言指令,用于执行各种记录操作,例如:

  1. 保存函数体中使用的易失性寄存器;
  2. 为当前函数设置新的栈帧;
  3. 为局部栈变量分配栈空间;
  4. 初始化栈饼干以检测缓冲区溢出;
  5. 为当前函数设置异常处理程序。

类似地,函数的尾声在返回给调用者之前执行相反的操作。

切换模式中,也可能有一些指令仅用于执行额外的操作以确定间接跳转的目标,并不代表代码的实际逻辑。

为了不浪费时间分析这些样板或不感兴趣的代码,并仅显示函数的“真实”主体,反编译器依赖于处理器模块来标记这些指令。

显示可跳过的指令

默认情况下,跳过的指令在视觉上没有任何区别。要启用它们的可视化效果,可以创建一个名为idauser.cfg的文本文件,内容如下:

#ifdef __GUI__
PROLOG_COLOR = 0xE0E0E0 // 灰色
EPILOG_COLOR = 0xE0FFE0 // 浅绿色
SWITCH_COLOR = 0xE0E0FF // 粉色
#endif

将文件放在用户目录中(Windows上为%appdata%Hex-RaysIDA Pro,Unix上为$HOME/.idapro),然后重启IDA或重新加载数据库以在反汇编列表中观察效果。

原始反汇编:

IDA 技巧(68) 可跳过指令

原始反汇编

创建配置文件后:

IDA 技巧(68) 可跳过指令

创建配置文件后

如你所见,前面三条和最后两条指令以指定的颜色高亮显示。这些指令将在反编译过程中被跳过。

修改可跳过的指令

有时你可能需要调整IDA对跳过指令的判断。例如,IDA可能未能将某些寄存器保存标记为序言的一部分(这可能表现为伪代码中对未初始化变量的访问)。在这种情况下,你可以手动修复:

  1. 在反汇编视图中,选择应标记的指令;
  2. 调用编辑 > 其他 > 切换可跳过指令…;
  3. 选择类别(序言/尾声/切换)并点击确定。

如果出现相反的问题(IDA错误地标记了一些必要的指令),执行相同的操作,除了在步骤3中不会有对话框——指令将直接被取消标记。

更多文章

立即关注【二进制磨剑】公众号

👉👉👉【IDA 技巧合集】👈👈👈
👉👉👉【Github 安全项目合集】👈👈👈
学习零基础学习 IDA 逆向
【课程完结!内容揭秘!】7 天打造 IDA 9.0 大师:从零基础到逆向精英
知识星球🪐

IDA 技巧(68) 可跳过指令

原文始发于微信公众号(二进制磨剑):IDA 技巧(68) 可跳过指令

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

发表评论

匿名网友 填写信息