0

我需要调用VirtualAllocEx并返回 IntPtr。我调用该函数来获取一个空地址,这样我就可以在那里编写我的代码库(这是在另一个进程中)。

如何将结果转换为 UInt32,以便最近可以使用该地址调用 WriteProcessMemory()?

4

3 回答 3

2

当您调用 WriteProcessMemory 时,您应该为地址传递一个 IntPtr 而不是 UInt32(因为 WriteProcessMemory 需要一个指针,而不是整数)。因此,您应该能够直接使用 VirtualAllocEx 返回的 IntPtr,而无需将其转换为 UInt32。

于 2009-04-25T07:15:06.687 回答
1

我相信你可以用 (uint)ptr 投射它(如果它不能很好地投射,请先尝试 ptr.ToInt32() 或 ToInt64() 。至少我不知道这种方法有任何问题,没有使用它 - 太多了。鉴于 UInt32 的范围比 Int32 更大,并且在非负方面与 Int64 相同,它应该足够好。

虽然不确定 Int32 在 64 位架构上的行为方式。糟糕的是,我认为 IntPtr 的原因是提供独立于平台的方式来存储指针。

于 2009-04-25T07:34:19.197 回答
0

您的 WriteProcessMemory 的 DLlImport 不正确,基地址是一个指针,因此应将其定义为 IntPtr。

MSDN

您需要修复您的 DllImport 语句。

于 2009-04-25T07:43:00.847 回答