lwz实际发生了什么?

时间:2016-03-30 18:46:17

标签: assembly powerpc instructions

我正在查看以下说明,我似乎无法理解它。我试过阅读几个在线PowerPC指令参考,但对我来说这些并不是很容易理解。

lwz       r4, dword_91C0DB28@l(r28)

这里dword如何在IDA中显示

dword_91C0DB28: .long 0    

调用lwz时究竟发生了什么?为什么它有用?

2 个答案:

答案 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 等愚蠢的反汇编程序查看原始说明。