【发布时间】:2023-03-17 13:39:01
【问题描述】:
我目前在玩的一些游戏中搞乱内存,看看我能做什么,我有一个修改过的内存编辑类来满足我的需要,但是我无法编辑或读取导致的布尔值我的问题。该类帮助我通过钩子修改外部进程的值。
写入 bool 值是我最想做的,这是我尝试过的,但 TBH 我不知道它有什么问题
public bool WriteBool(int Address, bool Value)
{
byte[] bArray = BitConverter.GetBytes(Value);
bool flag = Process_MemoryReaderWriter.WriteProcessMemory((IntPtr)this.Handle, (IntPtr)Address, bArray, 2, 0);
return flag;
}
我还需要读取一些我尝试过的布尔值;
public bool ReadBool(int Address)
{
IntPtr intPtr = IntPtr.Zero;
byte[] bArray = new byte[4];
IntPtr intPtr1 = intPtr;
Process_MemoryReaderWriter.ReadProcessMemory((IntPtr)this.Handle, (IntPtr)Address, bArray, 2, out intPtr1);
int rBInt = BitConverter.ToInt32(bArray, 0);
int num = rBInt;
bool boolValue = num != 0;
return boolValue;
}
我已经确定布尔值是问题所在,因为其他一切似乎都可以正常工作,这是程序似乎失败的最后一步。 正如您可能会说的那样,我真的不知道我在做什么(证据它不起作用)但任何帮助都会有所帮助,如果可能的话请记住这一点,请尝试以半简单的方式保留答案。
我相信我已经提供了一切,但如果您需要更多信息,请询问:)
【问题讨论】:
-
如何在内存中构造“布尔”值取决于所使用的平台和/或编程语言。通常它们存储为整数 0 或 1,但它们的大小可能不同,大小可能是 1、2 或 4 个字节(甚至可以看到 8)。确保尺寸正确。
-
BitConverter是一个用于序列化的辅助类,而不是一种能够为您提供目标所需字节的神奇方法。 “Bool”不是一个定义明确的类型,你需要知道真假值在特定游戏中是如何表示的(这取决于编译器、平台、“低级”黑客......)。BitConverter.GetBytes(bool)为您提供一个零或一字节,这几乎永远是您想要的。