2

「改善」しようとしている PC ゲームのコードを調べてきました。(わかりましたので、ゲームが苦手かもしれませんが、それでもプレイしたいです)。次のコードを調べてください。

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

このコードは、レベル カウントダウン タイマーに対して毎秒呼び出されます。数分間、特定のレベルにとどまる必要があります。アドレス [ebp+00007B1C] にプッシュされる値が 0 になるように上記のコードを変更できれば、ゲーム レベルは常にタイムアウトになり、クレイジーな「サバイバル」ミニゲームをプレイする必要がなくなります。

このコードから私が理解したことを説明します。心配しないでください。これに深く入る必要はありません。最初の行で 、タイマー値を取得します。たとえば、残り 97 秒の場合、この値がロードされるのはここです。2 行目で
は、値 (1 秒) が 97 から減算されます。3 行目では 、96 が再びメモリに移動されます。最後に、残り時間に基づいて他の処理を行う関数呼び出しがあります。

あとは、プッシュされる値が 0 になるように、このコードになんらかのパッチを適用するだけです (3 番目のステップ)。
これで私を助けてもらえますか?

4

3 に答える 3

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
于 2009-09-30T19:53:20.573 に答える
2

別のパッチ:
交換

fld dword ptr[ebp+00007B1C]

fld dword ptr[esp+64]
NOP
NOP
于 2009-09-30T20:17:58.980 に答える
1

2 番目のコマンドを省略します。つまり、fsub コマンドが使用するバイト数を調べ、その数の無操作バイトコード (0x90) で上書きします。

于 2009-09-30T19:22:40.310 に答える