記述が不十分なコードの変更不可能なライブラリに対応するために、コードを少しハックするという課題に再び直面しました。
何時間も調査した後(関数ポインターにどのような状態も渡すことができないことがわかった後)、EAXを0xCCCCCCCCにリセットする関数ヘッダー内のASMバイトをNOPアウトする必要があります。
組み込みのVC++デバッガーを使用して関数の「アドレス」を取得し、チートエンジンでバイトの配列エントリを手動で作成することで(これはこの種のことには驚くほど便利です)、バイトを正常にプルアップし、NOPを実行できました。手動で5バイトのシーケンス。
ただし、これをプログラムで行うことは少し異なります。
次のいずれかを実行すると、アドレスはデバッガーが報告しているアドレスよりも大幅に高くなり、間違ったバイトへのポインターが表示されます。
unsigned int ptr = reinterpret_cast<unsigned int>(testhack);
unsigned char* tstc = (unsigned char*)&testhack;
FARPROC prc = GetProcAddress(GetModuleHandle("mod.dll"), "testhack"); // Still
// returns the incorrect address (same as the previous two)
正しいアドレスを見つけるためにデバッガーは何をしていますか?プログラムで正しいアドレスを見つけるにはどうすればよいですか?