你能帮忙使用这个汇编语言代码吗?

时间:2009-09-30 19:16:18

标签: assembly patch disassembly

我一直在浏览一段我试图“改进”的电脑游戏代码。 (好吧所以也许我在游戏中很糟糕,但我还是想玩它)。您能否查看以下代码:

fld dword ptr[ebp+00007B1C]
fsub dword ptr[esp+64]
fst dword ptr[ebp+00007B1C]
call 004A2E48

此级别倒数计时器每秒调用此代码。我需要在特定的水平上停留几分钟。如果我可以修改上面的代码,以便推送到地址[ebp + 00007B1C]的值为0,那么游戏关卡将永远超时,这将使我无法玩那些疯狂的“生存”迷你游戏。

我会从这段代码中解释一下我的理解。 别担心,你不必深入研究这个问题。第一行中,我们获得了计时器值。例如,如果剩余97秒,则此处加载此值 在第二行中,从97中减去一个值(1秒) 在第三行 96再次移至内存。 最后我们有函数调用,它将根据剩余时间进行其他处理。

现在我需要做的就是以某种方式修补这段代码,以便推送的值为0(在第三步中)。
你能帮帮我吗?

3 个答案:

答案 0 :(得分:4)

替换

fld dword ptr[ebp+00007B1C]
fsub dword ptr[esp+64]

fldz ; Push zero on to top of floating point stack
nop ; From the end of the fldz to the beginning of the store instruction

答案 1 :(得分:2)

另一个补丁:
取代

fld dword ptr[ebp+00007B1C]

fld dword ptr[esp+64]
NOP
NOP

答案 2 :(得分:1)

刚刚结束第二个命令。也就是说,找出fsub命令占用的字节数,并用许多无操作字节码(0x90)覆盖它。