C#指针偏移> 255-ProcessMemoryReader

问题描述 投票:4回答:2

我知道那里有许多教程,向您展示如何使用“ 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();

所以行得通,这里发生的事情很简单,但是我不知道如何读取具有多个偏移量的Ammo代码。

我知道那里有许多教程,向您展示如何使用“ ProcessMemoryReader”函数。但是,这个问题似乎是独特的或尚未解决。一段时间以来,我一直在研究...

c# pointers offset readprocessmemory
2个回答
0
投票

我不熟悉CheatEngine及其表格式,但是我没有得到它指向您正在使用的内存地址的印象。


0
投票

使用FindDMAAddy为您遍历指针链,这是一个有效的示例,请确保您以管理员身份运行:

© www.soinside.com 2019 - 2024. All rights reserved.