我使用来自kernel32.dll的WinAPI函数WriteProcessMemory写入另一个进程'内存。
它工作了好几次,但之后就停止了正常工作。
我使用以下代码导入此功能:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);
这是我用来编写的代码:
int bytesWritten;
WriteProcessMemory(hProcess, (IntPtr)dwAdress, data, (uint)size, out bytesWritten);
它只是抛出了这个异常:
System.OverflowException
调试信息:
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
您的p / invoke声明不正确。最后两个参数是SIZE_T
,它是指针大小的。你的代码应该是:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
byte[] lpBuffer,
UIntPtr nSize,
out UIntPtr lpNumberOfBytesWritten
);
请注意,SIZE_T
是无符号类型,因此使用UIntPtr
。如果使用无符号类型不方便,可以将上面的内容切换为使用IntPtr
,因为你永远不会写2个 63 字节。
您提供的代码不会测试WriteProcessMemory
的返回值。请始终检查错误的返回值。例如:
if (!WriteProcessMemory(...))
throw new Win32Exception();