访问其他应用程序的内存C ++

时间:2011-05-16 10:39:14

标签: c++ memory-access

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

3 个答案:

答案 0 :(得分:7)

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

  1. 致电OpenProcessCreateProcess以访问或启动新流程。在此次通话中,您必须请求PROCESS_VM_READ访问权限。
  2. 调用ReadProcessMemory读取该打开过程中的一块内存。
  3. 如果您想更改其他流程的内存,则需要PROCESS_VM_WRITE访问权限并使用WriteProcessMemory来实现这一目标。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可能有兴趣查看Toolhelp32ReadProcessMemory函数。