我是组装初学者,我已经在网上搜索过这个问题,但无济于事......
最近我一直在尝试反汇编用于特定 Android 应用程序的库。用 IDA Pro 反汇编后,我遇到了这个子程序:
MOVS R3, 0x1AC
LDR R0, [R0,R3]
BX LR
我了解这 3 行中发生的大部分事情,但我被困在
LDR R0, [R0,R3]
这条线到底是做什么的?它是否将 R0 设置为 R0 中由 R3 偏移的值?
LDR R0, [R0,R3]
这条线到底做了什么
R3
充当基地址 ( R0
) 的偏移量。换句话说,有效地址是R0+R3
,并且从该地址加载的值被写入R0
。
请参阅LDR/STR 的文档。
不只是使用的原因LDR R0,[R0,#0x1AC]
可能是这是拇指代码。LDR/STR
Thumb 模式下的立即偏移量仅为 7 位(5 位向左移动 2 位),而 0x1AC 不适合 7 位。因此,偏移量首先放在寄存器中。