我正在为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模式绝对地址的正确方法吗?