【发布时间】:2011-04-02 23:57:56
【问题描述】:
这个问题可能看起来非常菜鸟,我很抱歉。在过去的三个月里,我一直在定期尝试弄清楚如何通过字节数组来读取/写入另一个进程内存或运行应用程序的进程内存。据我所知,C#没有读写内存进程的能力,所以必须通过P/Invoke调用win32 API dll。
[DllImport("kernel32.dll")]
static extern Int32 ReadProcessMemory(IntPtr OpenedHandle, IntPtr lpBaseAddress, byte[] lpBuffer, UInt32 size, out IntPtr lpNumberOfBytesRead);
我的目标是像在 Cheat Engine 中一样简单有效地搜索和替换几个字节数组。我通常会有两个单独的变量或在一个数组中:
private string original = "d0 d0 66 ae 0b 68 b9 0a";
private string replace = "d0 02 02 24 00 68 b9 0a";
在ReadProcessMemory 通话中,我不明白为什么需要lpBaseAddress。 OpenHandle 我通常会放置应用程序的字符串,因为我直接编辑它。 lpBuffer 我假设是要读取/写入的实际字节数组。 size 我不太确定,lpNumberOfBytesRead 是要读的数字吗?对WriteProcessMemory的相互提问也是如此。
[DllImport("kernel32.dll")]
private static unsafe extern Boolean WriteProcessMemory(IntPtr hProcess, uint lpBaseAddress, byte[] lpBuffer, int nSize, void* lpNumberOfBytesWritten);
我想引用一些我读过的教程,但它们似乎不再存在或已被替换。再次,我真诚地为提出这样一个看似业余的问题道歉,但是 S.O.是我最后的选择。
【问题讨论】:
标签: c#