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

C++ 访问其他应用程序的内存C++;,c++,memory-access,C++,Memory Access,我在想一个我已经有一段时间了的问题。。我想写一个C/C++程序(首先在windows下),可以访问(读取/更改值)其他运行程序的内存(堆栈、堆、所有内容)。(不像共享内存,而是计算机拥有的任何内存…)无需从我自己的应用程序启动应用程序。。 我以前见过这样的事情,但我就是不知道是怎么做到的。。如果我访问任何正在运行的程序的内存,我会从操作系统中得到错误,对吗? 感谢您的帮助 您可能有兴趣查看该函数。您可以从自己的应用程序启动一个进程(另一个程序),并访问它的一些信息(特别是共享内存)。相反,这是非

我在想一个我已经有一段时间了的问题。。我想写一个C/C++程序(首先在windows下),可以访问(读取/更改值)其他运行程序的内存(堆栈、堆、所有内容)。(不像共享内存,而是计算机拥有的任何内存…)无需从我自己的应用程序启动应用程序。。 我以前见过这样的事情,但我就是不知道是怎么做到的。。如果我访问任何正在运行的程序的内存,我会从操作系统中得到错误,对吗?
感谢您的帮助

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

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

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

  • 调用
    OpenProcess
    ,或
    CreateProcess
    访问或启动新流程。在此调用中,您必须请求
    PROCESS\u VM\u READ
    access
  • 调用
    ReadProcessMemory
    读取已打开进程中的内存块
  • 如果要更改另一个进程的内存,则需要
    process\u VM\u WRITE
    访问并使用
    WriteProcessMemory
    来实现这一点


    例如,在Linux中,您可以使用ptrace连接到进程并查看、戳它的内存。

    这表示它复制内存。。但我希望能够更改正在运行的程序的值..抱歉,我不够清楚。。我想更改一些已经运行的程序的值。谢谢,这很有帮助!所以底线是,我必须深入研究操作系统api?恐怕这正是你需要做的。