我正在查看以下说明,我似乎无法理解它。我试过阅读几个在线PowerPC指令参考,但对我来说这些并不是很容易理解。
lwz r4, dword_91C0DB28@l(r28)
这里dword如何在IDA中显示
dword_91C0DB28: .long 0
调用lwz时究竟发生了什么?为什么它有用?
答案 0 :(得分:3)
lwz
从定义的存储器地址向目标寄存器加载一个字,并将高32位归零。在这种情况下,目标是r4
,内存地址是dword_91X0DB28 + r28
。
答案 1 :(得分:1)
不,上面的答案不正确。
IDA 说明:
lwz r4, dword_91C0DB28@l(r28)
上面的指令访问内存 dword_91C0DB28
本身。
这个内存地址是由 IDA 的分析启发式计算出来的。
原始说明:
lwz r4, -12345(r28)
此时真正的指令就像上面一样。
您在 IDA 上看到的地址0x91C0DB28
将在运行时由 $r28
- 12345 创建。
(偏移量 -12345 只是一个例子)。
仅供参考: 您可以使用 objdump
等愚蠢的反汇编程序查看原始说明。