【问题标题】:Visual C# pointerRead method not returning anythingVisual C# pointerRead 方法不返回任何内容
【发布时间】:2013-09-19 00:55:24
【问题描述】:

这是我当前的计时器代码

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 使用什么值会比较好?

【问题讨论】:

    标签: c# visual-studio pointers memory


    【解决方案1】:

    您没有提供足够的信息来帮助您。您使用的是哪个库? var myMemory 的类是什么?为什么要将 HealthPointer 从 hex 转换为 dec 以将其存储为整数?

    尽管如此,您使用的库似乎提供了一个非常糟糕的 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>();
    }
    

    【讨论】:

    • 我刚刚意识到我在使用别人的内存类。我会试试你的
    • 在使用你的类时出现问题,在定义 healthLocation 时,VS 向我显示一个错误,上面写着“运算符'+'不能应用于'System.IntPtr'和'int []'类型的操作数" HealthOffset 是一个 int 数组,因为我的指针是多级指针
    • 您不能使用 IntPtr 对象追加和排列。如果您有一个多级指针,您可以使用循环解析最终位置。我编辑了我的答案。
    • Alight 我试过了,这是我目前的代码link,但我收到了这个错误“MemorySharp.dll 中发生'System.ArgumentOutOfRangeException' 类型的未处理异常附加信息:相对地址不能大于主模块大小。”----这个错误出现在我提供的粘贴链接的第8行。不太清楚为什么会发生这种情况
    • 编辑: link
    猜你喜欢
    • 2019-10-23
    • 2020-01-26
    • 2018-10-21
    • 2017-08-23
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多