5

我正在考虑一个我已经有一段时间的问题.. 我想编写一个 C/C++ 程序(首先在 Windows 下),它可以访问(读取/更改值)内存(堆栈,堆,一切)其他正在运行的程序。(不像共享内存,而是计算机拥有的任何内存......)无需从我自己的应用程序启动应用程序。我以前见过类似的东西,但我就是不知道它是如何完成的......如果我要访问任何正在运行的程序的内存我会从操作系统中得到错误,对吗?任何帮助表示赞赏!

4

3 回答 3

8

正如@sharptooth 所说,这需要操作系统的支持。不同的操作系统做的不同。由于您使用的是 Windows,因此您可以执行以下几个步骤:

  1. 调用OpenProcess, 或CreateProcess访问或启动一个新进程。在此调用中,您必须请求PROCESS_VM_READ访问权限。
  2. 调用ReadProcessMemory以读取该打开进程中的一块内存。

如果要更改另一个进程的内存,则需要PROCESS_VM_WRITE访问和使用WriteProcessMemory来实现。

例如,在 Linux 中,您可以使用 ptrace 附加到一个进程并查看、查看它的内存。

于 2011-05-16T10:47:49.323 回答
2

您可以从您自己的应用程序中启动一个进程(另一个程序),并访问它的一些信息(尤其是共享内存)。相反非常困难,CPU 伪造内存地址,因此每个进程都认为它拥有可用的全部内存......

于 2011-05-16T10:43:34.943 回答
0

您可能有兴趣查看该Toolhelp32ReadProcessMemory功能。

于 2011-05-16T10:42:01.147 回答