4

「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();

ここで何が起こっているかは非常に簡単ですが、複数のオフセットを使用して弾薬コードを読み取る方法がわかりません。

4

2 に答える 2

0

私は CheatEngine とテーブル形式に慣れていませんが、使用しているメモリ アドレスを指しているという印象は受けません。

で 4 バイトを読み取ります0x4DF73C。これは、次の読み取りの新しいメモリ アドレスとして使用されます。これが数回繰り返されます。基本的に、ポインターからポインターへのポインターから情報を読み取っています。これが意図されたものであると確信していますか?

255 より大きいオフセット値が問題になる理由はまったくありません。

于 2013-04-18T12:10:30.333 に答える