-1

我正在研究破解游戏以允许隆隆声。这需要将现有 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 模式下执行此操作,则可以加分。

4

1 回答 1

-1

问题在于算法示例本身。我使用调试器查看跳转偏移量在内存中的外观,它与示例中提供的完全不同。从那里我可以摆弄这些位,直到我得到必要的跳转偏移。不幸的是,我仍然不知道我应该如何计算它,但是,嘿,我得到了答案。

于 2021-09-25T00:40:29.090 回答