1

我是组装初学者,我已经在网上搜索过这个问题,但无济于事......

最近我一直在尝试反汇编用于特定 Android 应用程序的库。用 IDA Pro 反汇编后,我遇到了这个子程序:

MOVS    R3, 0x1AC
LDR     R0, [R0,R3]
BX      LR

我了解这 3 行中发生的大部分事情,但我被困在

LDR     R0, [R0,R3]

这条线到底是做什么的?它是否将 R0 设置为 R0 中由 R3 偏移的值?

4

1 回答 1

4

LDR R0, [R0,R3]
这条线到底做了什么

R3充当基地址 ( R0) 的偏移量。换句话说,有效地址是R0+R3,并且从该地址加载的值被写入R0
请参阅LDR/STR 的文档

不只是使用的原因LDR R0,[R0,#0x1AC]可能是这是拇指代码。LDR/STRThumb 模式下的立即偏移量仅为 7 位(5 位向左移动 2 位),而 0x1AC 不适合 7 位。因此,偏移量首先放在寄存器中。

于 2013-09-18T13:11:17.307 回答