我是大会的初学者,我已经在网上搜索了这个问题,但无济于事......
最近我一直试图反汇编用于特定Android应用程序的库。在用IDA Pro拆解后,我遇到了这个子程序:
MOVS R3, 0x1AC
LDR R0, [R0,R3]
BX LR
我理解这3行中发生的大部分内容,但我坚持
LDR R0, [R0,R3]
这条线到底做了什么?它是否将R0设置为R0偏移R3的值?
答案 0 :(得分:4)
LDR R0,[R0,R3]
这条线到底做了什么
R3
充当基址(R0
)的偏移量。换句话说,有效地址为R0+R3
,从该地址加载的值将写入R0
。
请参阅the documentation for LDR/STR。
不仅仅使用LDR R0,[R0,#0x1AC]
的原因可能是这是Thumb代码。 Thumb模式is only 7 bits中的LDR/STR
的立即偏移(5位向左移2位),0x1AC不适合7位。因此,偏移首先放在寄存器中。