[R0,R3]在汇编中做了什么?

时间:2013-09-18 13:07:46

标签: assembly arm

我是大会的初学者,我已经在网上搜索了这个问题,但无济于事......

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

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

我理解这3行中发生的大部分内容,但我坚持

LDR     R0, [R0,R3]

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

1 个答案:

答案 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位。因此,偏移首先放在寄存器中。