注释
当您无法为变量或函数想出一个好的名称时,您可以添加注释,并对所发生的情况进行解释或理论。
伪代码中提供了以下注释类型:
-
普通行注释:使用 / 添加或编辑它们(很容易记住, C++ 中 // 用于注释)
-
块注释:与反汇编视图中行间注释类似,使用 Ins 快捷方式(Mac 上为 I)。注释添加在当前语句之前(不一定是当前行)。
-
函数注释:当您在函数的第一行使用 / 时,会添加函数注释。 -
由于实现的限制,当伪代码更改时,前两种类型可能会移动,甚至最终成为孤立注释。
函数注释附加到函数本身,并且在反汇编视图中也可见。
使用注释,我们可以对上一篇文章中的函数进行注释,以阐明发生了什么。
在下面的屏幕截图中,普通注释以蓝色突出显示,而块注释则以橙色显示。
最后,该函数似乎将字节从 a2 复制到 a1,并在第一个零字节处停止。如果您了解 libc,您很快就会意识到它实际上是 strcpy 的一个简单实现。
现在,我们可以将函数和参数重命名为规范名称,并添加函数注释来解释函数的用途。
遗憾的是,现有注释不会自动更新,因此必须手动修复对 a1 和 a2 的引用。
空行
为了进一步提高伪代码的可读性,您可以手动或自动添加空行。
对于手动行,请在语句之后或之前按 Enter。
例如,以下是添加了额外空行的相同函数:
要删除手动空行,请编辑前面的注释(Mac 上的 Ins 或 I)并从注释中删除空行。
要添加自动空行,请在 hexrays.cfg 中设置 GENERATE_EMPTY_LINES = YES
。
这将导致反编译器在复合语句之间以及标签之前添加空行。
这提高了长函数或复杂函数的可读性。
例如,这是具有两种设置的同一函数的反编译。
您可以看到,由于额外的间距,第二个读起来更容易。
原文始发于微信公众号(二进制磨剑):IDA 技巧(42) 反编译器中的注释
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论