ARM拇指绝对地址ldr [pc,#value]

时间:2017-06-04 12:59:01

标签: assembly arm machine-code thumb

我正在为ARM编写简单的反汇编程序并使用THUMB代码:

0000918a  dff814c0   ldr     r12, [pc, #0x14]
00009192  0448       ldr     r0, [pc, #0x10] 
00009194  044b       ldr     r3, [pc, #0x10]

IDA diassembler将解析为绝对地址:

LDR.W   R12, unk_91A0
LDR     R0, unk_91A4
LDR     R3, unk_91A8

我的问题是如何为THUMB代码计算这个绝对地址(unk_91A0,unk_91A4,unk_91A8)?

用笔和纸我想出来可以像这样计算:

abstoluteAddr = 0xInstructionAddress + 0x#Value + 2;
abstoluteAddr = alignUp(abstoluteAddr, 4); //alignment up to 4

所以

00009194  ldr     r3, [pc, #0x10]

将是00009194 + 0x10 + 2 = 0x91a6和alignUp(0x91a6,4)= 0x91A8 这是正确的,与IDA反汇编程序匹配。

这是计算THUMB模式绝对地址的正确方法吗?

0 个答案:

没有答案