我希望能够从另一个进程的内存中进行读写。我从Readprocessmemory()调用了WriteProcessmemory()Kernel32.dll函数,并使用GetProcessByName()函数来查找进程。这样成功了。

我看到了使用readprocessmemory()函数并在从kernel32.dll调用它后对其进行声明的示例,但是我不明白它的工作原理-如何使用该函数从另一个进程中读取?我将不胜感激。

最佳答案

为了读取内存并将其写入另一个进程,您需要使用kernel32提供的ReadProcessMemory和WriteProcessMemory函数。如果使用的是C#,则需要使用PInvoke将这些函数导入当前进程。

通常,您需要执行以下操作:

  • 找出要读取/注入(inject)
  • 的过程
  • 调用OpenProcess()以获取该进程的句柄。您将要发送GENERIC_READ | GENERIC_WRITE作为对此的标志,您将获得一个HPROCESS,您需要检查它是否不为NULL。
  • 决定要在外部进程中读取的位置(这是外部进程指针)。您还需要确定要读取多少个字节。
  • 在当前进程中分配许多字节以保存读取结果。
  • 调用ReadProcessMemory,传入您已打开的HPROCESS,在另一个进程中读取的外部进程指针,指向本地缓冲区的指针以及将从外部进程读取到本地缓冲区的字节数。

  • 完成此操作后,您可以查看您的本地缓冲区,并且您将看到曾经在外来进程中的数据,并且生活会很好。

    关于c# - 从其他进程读取和写入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8694557/

    10-14 09:23
    查看更多