【问题标题】:Accessing Memory of other applications C++访问其他应用程序 C++ 的内存
【发布时间】:2011-08-26 08:20:03
【问题描述】:

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

【问题讨论】:

    标签: c++ memory-access


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,这很有帮助!所以底线我必须通过操作系统 api 挖掘?
    • 恐怕这就是你需要做的。
    【解决方案2】:

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

    【讨论】:

    • 抱歉我不够清楚..我想更改一些已经在运行的程序的值..
    【解决方案3】:

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

    【讨论】:

    • 这表示它复制了内存.. 但我希望能够更改正在运行的程序的值..
    猜你喜欢
    • 2011-02-06
    • 2016-08-16
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    相关资源
    最近更新 更多