ARM Assembly:需要帮助计算BL操作码的跳转偏移量



我正在开发一款允许rumble的游戏。这需要用我想调用的新函数的bl替换现有房间中的一行代码,但是我很难计算必要的偏移量。

我要替换的功能是在地址:0x080011b0

和我希望跳转到的位置是在地址:0x0817d7c0

还提供了以下示例:

Calculate the jump address from 0xA20C0 to 0x3E7900. Here it is important to distinguish between arm32bit 
code or thumb16bit code. This game is 16bit.
0x3E7900-0xA20C0=0x345840 
0x345840-4=0x34583C 
High=0x34583C>>12=0x345 
Low=(0x34583C&0xFFF)/2=0xC1E 
machineCode = ((0xFF00 | low) << 16) | (0xF000 | high)= 0xFC1EF345

我相当确定游戏是16位的,但是我甚至不能复制示例的结果,更不用说产生我自己的跳跃偏移了。我相信这些值是用little-endian编码的,但是我尝试了big和little都没有运气(我可能在这里做错了什么)。具体来说,当我执行按位操作(&和|)。

如果有人可以引导我通过这个例子来产生所提供的偏移量,或者可以计算我需要的偏移量并引导我完成它,我将非常感激。如果你能告诉我如何在32位ARM模式下做到这一点,那就加分了。

问题在于算法示例本身。我使用了一个调试器来查看跳转偏移量在内存中的样子,它与示例中提供的完全不同。从那里,我能够摆弄比特,直到我得到必要的跳跃偏移。不幸的是,我仍然不知道我应该如何计算它,但是,嘿,我得到了答案。

最新更新