我们之前已经讨论过简单偏移量,即操作数值或数据值与程序中的地址匹配,因此可以直接转换为偏移量。然而,程序也可能采用更复杂或间接的方式来引用位置。一种常见的方法是使用从某个预定义基址的小偏移量。
从寄存器的偏移量(位移)
许多处理器支持称为“寄存器带位移”、“寄存器带偏移”或类似的寻址模式。此类模式中的操作数可能使用类似以下的语法:
-
reg(offset) -
offset(reg) -
reg[offset] -
[reg, offset] -
[reg+offset] -
等等
基本逻辑在所有情况下都是相同的:偏移量加到寄存器的值上,然后用作数字或(更常见地)地址。在后一种情况下,让IDA为您计算最终地址并添加交叉引用可能会很有用。如果您知道在执行此指令时寄存器的值(例如,它在前面的指令中设置),这就非常简单:
-
将光标放在操作数上,调用 编辑 > 操作数类型 > 偏移量 > 偏移量(用户定义),或按 Ctrl
–R
; -
在基址字段中输入寄存器值; -
点击确定; -
IDA将计算最终地址,用等效表达式替换偏移量值,并添加到目标的交叉引用:
现在很明显,被引用的位置是dword_E01FC0C4
。
学习资源
立即关注【二进制磨剑】公众号
原文始发于微信公众号(二进制磨剑):IDA技巧(105)自定义基址的偏移量
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论