修改二进制文件以扩展数组大小

时间:2018-10-28 16:05:47

标签: c++ linux assembly

我有一个二进制文件,需要对其进行一些微调以将数组的大小从32的长度增加到64的长度。目的是我试图使用非常特定的硬件运行游戏,游戏本身不支持,因为将操纵杆上的按钮数量限制设置为32,而我的硬件注册为带有48个按钮的操纵杆。启动游戏时,出现堆栈溢出,游戏崩溃的情况。

我想非常清楚,这与作弊无关。我正在尝试使用街机橱柜的舞蹈舞台(而不是Xinput控制器)玩单人节奏游戏。此游戏本机支持“跳舞”模式,但不支持我的确切硬件。

由于我不是开发或发布游戏的公司的雇员,所以我无法访问实际的项目代码,但是我知道问题代码的样子(请参见下面的C ++示例)。我已经通过gdb运行了游戏,并反汇编了问题函数(请参见下面的asm代码)。我已经注意到了一些有关ASM的兴趣点,但是我绝对不是汇编的专家,甚至不是初学者,所以我真的很感谢能帮助我调整此二进制文件的人。

到目前为止,我尝试将+9+4480x5c调整为0x7c,然后在cmp上调整+2400x200x40。这导致我遇到了内存访问冲突;效果不理想〜

我最后要指出的是,该任务过去是在较旧版本的游戏上完成的,但是bspatch文件似乎丢失了。最初的二进制编辑器指出,他“只是调整了数组的长度”,但没有提供更多细节。我的假设是,该单个功能需要调整,但是也许比我自己知识更渊博的人可以阅读程序集并告诉我是否需要做更多的挖掘工作。

C++ Code

ASM Code

编辑:找到解决方案!

@geza注意到堆栈中有16个未使用的字节,并且我的操纵杆比C ++中的数组多了16个按钮。因此,我们在+240上将按钮循环中的cmp0x20调整为0x30,并通过在{+1上将nop移出了jne来禁用堆栈溢出保护442。有点脏,但游戏似乎运行正常。 :)

Updated ASM

0 个答案:

没有答案