Visual C# 指针读取方法不返回任何内容

本文关键字:返回 任何内 方法 指针 读取 Visual | 更新日期: 2023-09-27 18:31:37

这是我在计时器上的当前代码

myMemory.ReadProcess = myProcess[0];
myMemory.Open();
int pointerAddress = HexToDec(HealthPointer);
int[] pointerOffset = HealthOffest;
int tempBytesToRead;
uint valueToRead = 8;
byte[] oldHealth = myMemory.PointerRead((IntPtr)pointerAddress, valueToRead, pointerOffset, out tempBytesToRead);
HealthToFill = BitConverter.ToInt32(oldHealth, 0) + 1;

int bytesWritten;
//Get current health
byte[] valueToWrite = BitConverter.GetBytes(HealthToFill);
string writtenAddress = myMemory.PointerWrite((IntPtr)pointerAddress, valueToWrite, pointerOffset, out bytesWritten);
myMemory.CloseHandle();

这段代码写入地址很好,但是当我尝试读取它时,它总是返回0。顺便说一句,HealthToFill是一个浮动,是的,我已经尝试过BitConverter.ToSingle(oldHealth,0)。但是我调试了它,似乎字节数组oldHealth没有写入任何数据。如果我尝试读取的浮点数可以在 3-6 个整数和许多小数位之间,那么用于uint valueToRead的好值是什么?

Visual C# 指针读取方法不返回任何内容

您没有提供足够的信息来帮助您。您使用的是哪个库?变量myMemory的类别是什么?为什么要将健康指针从十六进制转换为十进制以将其存储在整数中?

尽管如此,您使用的库似乎提供了一个非常破碎的 API。我建议你看看另一个记忆编辑库,比如MemorySharp(我是作者)。使用它,你可以像这样编写代码。

using (var m = new MemorySharp(ApplicationFinder.FromProcessName("app").First()))
{
    var healthLocation = m[m[healthPointer].Read<IntPtr>() + healthOffset];
    var health = healthLocation.Read<float>();
    healthLocation.Write(newValue);
}

编辑:使用循环浏览多级指针。

var healthPtr = new IntPtr(0xdeadbeef);
var offsets = new[] { 4, 5, 6 };
foreach (var offset in offsets)
{
    healthPtr = m[healthPtr + offset, false].Read<IntPtr>();
}