Я знаю, что существует множество руководств, в которых показано, как использовать функции "ProcessMemoryReader". Но эти проблемы кажутся уникальными или еще не решенными.
Довольно долго я копался в чужом коде, чтобы найти способ использовать несколько смещений. И я думал, что использование нескольких смещений было проблемой для меня, но я думаю, что это проблема с тем фактом, что мое значение смещения больше 255.
Игра, из которой я пытаюсь получить значения памяти, называется Assault Cube. Поскольку я не был уверен, что получил правильные значения смещения, я погуглил, где другие результаты. Они кажутся абсолютно одинаковыми: 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();
Итак, это работает, это довольно прямолинейно, что здесь происходит, но я не могу понять, как читать код боеприпасов с несколькими смещениями.