我正在研究破解游戏以允许隆隆声。这需要将现有 rom 中的一行代码替换为我想调用的新函数的 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 编码的,但我已经尝试过大运气和小运气(我可能在这里做错了)。具体来说,当我执行按位运算(& 和 |)时,计算开始中断。
如果有人可以引导我完成示例以生成提供的偏移量,或者可以计算我需要的偏移量并引导我完成它,我将非常感激。如果您能告诉我如何在 32 位 ARM 模式下执行此操作,则可以加分。