关于ADR.W指令的问题
逆向工程
手臂
拇指2
                    2021-07-04 00:09:50
                
            
        1个回答
            正如你所说,你有——
imm8 = 0010 0100
imm3 = 011
但你也有
i = 0
然后
imm32 = ZeroExtend(i:imm3:imm8,32) =>
imm32 = ZeroExtend(0:011:00100100,32) =>
imm32 = ZeroExtend(001100100100,32) =>
imm32 = 00000000000000000000001100100100 = 0x00000324
ADR 指令说明解释为“该指令在PC 值上加上一个立即数,形成一个PC 相对地址,并将结果写入目的寄存器”。
当您处于 Thumb 模式时,PC 的值等于指令的(4 字节对齐)地址 + 4 字节。在你的情况下,指令是在地址0x080461FC所以PC = 0x080461FC + 4 = 0x08046200
然后地址计算是 -
PC + imm32 = 0x08046200 + 0x00000324 = 0x08046524
这就是你在 IDA 的反汇编中看到的。
如果您查看 ARM 体系结构参考手册中 ADR 指令的“操作”部分,您可以看到对此的解释。
