「ProcessMemoryReader」関数の使用方法を示すチュートリアルがたくさんあることは知っています。しかし、この問題は独特であるか、まだ解決されていないようです。
かなり長い間、私は他の人のコードを掘り下げて、複数のオフセットを使用する方法を見つけてきました。そして、複数のオフセットを使用することが問題だと思っていましたが、オフセット値が 255 よりも大きいことが問題だと思います。
私がメモリ値を取得しようとしているゲームは、「アサルトキューブ」と呼ばれています。正しいオフセット値を取得したかどうかわからなかったので、他の結果がどこにあるかをグーグルで調べました。それらはまったく同じようです: http://cheatengine.org/tables/moreinfo.php?tid=1142 (チート エンジンがインストールされていない場合は、メモ帳で .ct ファイルを表示できます。)
を使用した私のコードは次のとおりですProcessMemoryReader.cs
。
private void timer1_Tick(object sender, EventArgs e)
{
int bytesread;
int pointerbase;
byte[] memory;
Process[] myprocess = Process.GetProcessesByName("ac_client");
if (myprocess.Length != 0)
{
preader.ReadProcess = myprocess[0];
preader.OpenProcess();
//Ammo
memory = preader.ReadProcessMemory((IntPtr)0x4DF73C, 4, out bytesread);
pointerbase = BitConverter.ToInt32(memory, 0);
pointerbase += 0x00; //0 // 14 // 378
byte[] memory1 = preader.ReadProcessMemory((IntPtr)pointerbase, 4, out bytesread);
int pointerbase1 = BitConverter.ToInt32(memory1, 0);
pointerbase1 += 0x14; //0 // 14 // 378
byte[] memory2 = preader.ReadProcessMemory((IntPtr)pointerbase1, 4, out bytesread);
int pointerbase2 = BitConverter.ToInt32(memory2, 0);
pointerbase2 += 0x378; //00 // 14 // 378
byte[] memory3 = preader.ReadProcessMemory((IntPtr)pointerbase2, 4, out bytesread);
int valueis = BitConverter.ToInt32(memory3, 0);
label1.Text = valueis.ToString();
}
単一のポインターを使用しても、プロセスは正常に機能します。次に例を示します。
//HP
memory = preader.ReadProcessMemory((IntPtr)0x4DF73C, 4, out bytesread);
pointerbase = BitConverter.ToInt32(memory, 0);
pointerbase += 0xf4;
byte[] memory1 = preader.ReadProcessMemory((IntPtr)pointerbase, 4, out bytesread);
int valueis = BitConverter.ToInt32(memory1, 0);
label2.Text = valueis.ToString();
ここで何が起こっているかは非常に簡単ですが、複数のオフセットを使用して弾薬コードを読み取る方法がわかりません。