首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual C# pointerRead方法不返回任何内容

Visual C# pointerRead方法不返回任何内容
EN

Stack Overflow用户
提问于 2013-09-17 16:10:44
回答 1查看 209关注 0票数 0

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

代码语言:javascript
复制
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来说,使用哪个值是一个很好的选择

EN

回答 1

Stack Overflow用户

发布于 2013-09-18 01:40:55

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

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

代码语言:javascript
复制
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);
}

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

代码语言:javascript
复制
var healthPtr = new IntPtr(0xdeadbeef);
var offsets = new[] { 4, 5, 6 };

foreach (var offset in offsets)
{
    healthPtr = m[healthPtr + offset, false].Read<IntPtr>();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18844574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档