チートエンジンの使用アドレス0x10456554のバイトの配列を見つけます。私はC#でバイトの配列を探したいので、最初にアクセス許可0x1F0FFF(すべてのアクセス)でゲームプロセスを開き、その後、0x00000000〜0x7FFFFFFF(全体のプロセス)とそのセクション(0x10000000など)からReadProcessMemory 。)はすべて空です。ReadProcessMemoryはバイトアドレスの配列を見つけることができません
私はすべてのモジュールをステップ実行し、個々のダンプファイルにデータをダンプしようとしました。しかし、アドレスセクション(0x10000000)はダンプされず、ほとんどスキップされたようなものでした。チートエンジンでさえ、メモリのセクションは特定のモジュールに属していないと言います。だから私はどこから来ているのか分からない。
public IntPtr pHandle = OpenProcess(0x1F0FFF, 1, id);
public Process procs = Process.GetProcessById(id);
//dump main module first
byte[] test = new byte[procs.MainModule.ModuleMemorySize];
ReadProcessMemory(pHandle, (UIntPtr)((int)procs.MainModule.BaseAddress), test, (UIntPtr)procs.MainModule.ModuleMemorySize, IntPtr.Zero);
File.WriteAllBytes(procs.MainModule.BaseAddress.ToString("x8") + " " + procs.MainModule.ModuleName + ".dmp", test);
//now dump all other modules
foreach (ProcessModule p in procs.Modules)
{
byte[] test2 = new byte[p.ModuleMemorySize];
ReadProcessMemory(pHandle, (UIntPtr)((int)p.BaseAddress), test2, (UIntPtr)p.ModuleMemorySize, IntPtr.Zero);
File.WriteAllBytes(p.BaseAddress.ToString("x8") + " " + p.ModuleName + ".dmp", test2);
}
でこのコードを発見しました。コード内のダイナミックリージョンを読み込むことさえできません。なぜあなたは0x10000000の周りのメモリがゼロだと思いますか?私はあなたがそれを読む/書く場所がわかりません –
ダンプファイルに0x00000000 - 0x7FFFFFFFをダンプし、16進数のセクションで0x10000000を読み込むと、すべて0になります。 –
未割り当てページを読み取ることができないため、読み取り全体が失敗します。出力をチェックすると、0x1000000だけでなく、配列全体が0になります。 bytesReadCount outパラメータをチェックすることによって、読み込みが成功したかどうかを確認することができます –