题
我正在思考一个困扰我有一段时间的问题..我想编写一个 C/C++ 程序(首先在 Windows 下),它可以访问(读取/更改值)其他正在运行的程序的内存(堆栈、堆、所有内容)。(不像共享内存,而是计算机拥有的任何内存..)无需从我自己的应用程序启动应用程序..我以前见过类似的东西,但我不知道它是如何完成的..如果我要访问任何正在运行的程序的内存,我会从操作系统中收到错误,对吧?任何帮助表示赞赏!
解决方案
正如@sharptooth所说,这需要操作系统的支持。不同的操作系统有不同的做法。由于您使用的是 Windows,因此您可以执行以下几个步骤:
- 称呼
OpenProcess
, , 或者CreateProcess
访问或启动新进程。在此通话中,您必须请求PROCESS_VM_READ
使用权。 - 称呼
ReadProcessMemory
读取该打开进程中的一块内存。
如果你想改变另一个进程的内存,你需要 PROCESS_VM_WRITE
访问和使用 WriteProcessMemory
为了实现这一点。
例如,在 Linux 中,您可以使用 ptrace 附加到进程并查看、查看其内存。
其他提示
您可以从您自己的应用程序启动进程(另一个程序),并访问其一些信息(尤其是共享内存)。相反的是非常困难的,CPU伪造内存地址,因此每个过程都认为它具有可用的整个内存...
您可能有兴趣查看 Toolhelp32ReadProcessMemory
功能。
不隶属于 StackOverflow