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

有帮助吗?

解决方案

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

  1. 称呼 OpenProcess, , 或者 CreateProcess 访问或启动新进程。在此通话中,您必须请求 PROCESS_VM_READ 使用权。
  2. 称呼 ReadProcessMemory 读取该打开进程中的一块内存。

如果你想改变另一个进程的内存,你需要 PROCESS_VM_WRITE 访问和使用 WriteProcessMemory 为了实现这一点。

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top