我知道那里有许多教程,向您展示如何使用“ 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”函数。但是,这个问题似乎是独特的或尚未解决。一段时间以来,我一直在研究...
我不熟悉CheatEngine及其表格式,但是我没有得到它指向您正在使用的内存地址的印象。
使用FindDMAAddy为您遍历指针链,这是一个有效的示例,请确保您以管理员身份运行: