IDA技巧(114)分割偏移量

admin 2025年2月20日19:08:29评论44 views字数 1377阅读4分35秒阅读模式

我们已经讨论过 偏移量表达式,这些表达式可以适应单个指令操作数或数据值。但情况并不总是如此,所以让我们看看IDA如何处理可能由多个部分构成的偏移量。

8位处理器

尽管逐渐被淘汰,8位处理器——尤其是经典的8051——仍然可能出现在当前的硬件中,当然我们还将处理遗留系统很多年。即使它们的寄存器只能存储8位数据,但大多数可以寻址16位(64KiB)或更多的内存,这意味着地址可能需要分段构建。

例如,考虑以下来自8051固件的指令序列:

ounter(lineounter(lineounter(lineounter(linemov R3, #0xFFmov R2, #0xF6mov R1, #0xA6sjmp code_CF36

8051的代码通常使用Keil C51编译器编译,这种模式是初始化通用代码内存指针的典型方式。被引用的地址是0xF6A6,但我们能否让指令看起来“漂亮”并创建交叉引用呢?

一种可能性是对最后一个移动使用自定义基址偏移量,并指定基址为0xF600

IDA技巧(114)分割偏移量

这确实计算了最终地址并创建了交叉引用,但代码看起来不太“漂亮”,其他指令仍然是普通数字:

IDA技巧(114)分割偏移量

实际上,更好的选择是对这两个指令使用高8/低8偏移量。因为每个指令仅提供完整偏移量的一部分,单独不能被IDA用于计算完整地址,这需要用户提供。

R2提供了地址的高8位,所以我们应该为其使用HIGH8偏移类型。我们还需要在目标地址字段中填写完整地址(0xF6A6)。基址应重置为0。

IDA技巧(114)分割偏移量

对于R1,可以使用LOW8和相同的目标:

IDA技巧(114)分割偏移量

在应用了这两个偏移量后,IDA使用匹配的汇编操作符显示它们:

IDA技巧(114)分割偏移量

RISC处理器

RISC处理器通常使用固定宽度指令,可能无法在指令中有限的立即操作数空间内达到地址空间的全部范围。这包括SPARC、MIPS、PowerPC等。作为例子,让我们看看这个PowerPC VLE代码片段:

ounter(lineounter(lineounter(lineounter(linee_lis r3, 1 # 加载立即数移位e_add16i r3, r3, -0x1650 # 0xE9B0se_mtlr r3se_blrl

代码在r3中计算一个函数的地址,然后调用它。IDA在注释中帮助显示了最终地址,但我们也可以使用自定义偏移量来更好地表示它们。对于e_add16i指令,我们可以使用LOW16类型,但在e_lis的情况下,应该使用处理器特定类型HIGHA16而不是HIGH16。这是因为低16位在这里不是直接使用,而是作为符号扩展的加数,最终地址的高16位在加法后变为0(0x10000-0x1650=0xE9B0)。

IDA技巧(114)分割偏移量

在转换了这两个部分后,IDA使用特殊的汇编操作符显示最终地址:

IDA技巧(114)分割偏移量

现在我们可以转到目标并在那里创建一个函数。

注意:特别是对于PowerPC,如果目标地址存在并有指令或数据,IDA会自动将这种序列转换为偏移表达式。但手动方法对于其他处理器或复杂情况(例如,两条指令相距太远)仍然有用。

学习资源

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

👉👉👉【IDA 技巧合集】👈👈👈
👉👉👉【Github 安全项目合集】👈👈👈
【课程完结!内容揭秘!】7 天打造 IDA 9.0 大师:从零基础到逆向精英
【课程完结!内容揭秘】第 2 期-Android 逆向内核攻防
【硬核来袭!】程序分析与反混淆【已完结】

原文始发于微信公众号(二进制磨剑):IDA技巧(114)分割偏移量

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

发表评论

匿名网友 填写信息