我需要调用VirtualAllocEx并返回 IntPtr。我调用该函数来获取一个空地址,这样我就可以在那里编写我的代码库(这是在另一个进程中)。
如何将结果转换为 UInt32,以便最近可以使用该地址调用 WriteProcessMemory()?
我需要调用VirtualAllocEx并返回 IntPtr。我调用该函数来获取一个空地址,这样我就可以在那里编写我的代码库(这是在另一个进程中)。
如何将结果转换为 UInt32,以便最近可以使用该地址调用 WriteProcessMemory()?
当您调用 WriteProcessMemory 时,您应该为地址传递一个 IntPtr 而不是 UInt32(因为 WriteProcessMemory 需要一个指针,而不是整数)。因此,您应该能够直接使用 VirtualAllocEx 返回的 IntPtr,而无需将其转换为 UInt32。
我相信你可以用 (uint)ptr 投射它(如果它不能很好地投射,请先尝试 ptr.ToInt32() 或 ToInt64() 。至少我不知道这种方法有任何问题,没有使用它 - 太多了。鉴于 UInt32 的范围比 Int32 更大,并且在非负方面与 Int64 相同,它应该足够好。
虽然不确定 Int32 在 64 位架构上的行为方式。糟糕的是,我认为 IntPtr 的原因是提供独立于平台的方式来存储指针。