【问题标题】:read and write from other process从其他进程读取和写入
【发布时间】:2012-01-01 17:58:50
【问题描述】:

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

我看到了获取readprocessmemory() 函数并在我从kernel32.dll 调用它后声明它的示例,但我不明白它是如何工作的——如何使用该函数从另一个进程中读取?我会很感激一个例子。

【问题讨论】:

  • 我对 C# 一无所知,但其他用户可能会喜欢您提到的示例的链接 - 不清楚您所说的“从 kernel32.dll 调用后声明它是什么意思” "。
  • 这里有一篇MSDN上的文章详细描述了ReadProcessMemory函数:link

标签: c# windows


【解决方案1】:

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

更一般地说,您需要做的是:

  • 确定您要读取/注入的进程是什么
  • 调用 OpenProcess() 以获取进程的句柄。您需要发送 GENERIC_READ | GENERIC_WRITE 作为这个标志,你会得到一个 HPROCESS 返回,你需要检查它是否为空。
  • 确定要从外部进程中读取的位置(这是外部进程指针)。您还需要决定要读取多少字节。
  • 在当前进程中分配那么多字节来保存读取结果。
  • 调用 ReadProcessMemory 传入已打开的 HPROCESS、要在其他进程中读取的外部进程指针、指向本地缓冲区的指针以及要从外部进程读取到本地的字节数缓冲区。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多