我正在考虑一段时间以来我遇到过的一个问题..我想编写一个可以访问(读取/更改值)内存的堆栈,堆栈的C / C ++程序(在windows下)其他正在运行的程序。 (不像共享内存,但计算机有任何内存..)无需从我自己的应用程序启动应用程序.. 我以前见过这样的东西,但我无法弄清楚它是如何完成的..如果我要访问任何正在运行的程序的内存,我会从操作系统中得到错误吗? 任何帮助表示赞赏!
答案 0 :(得分:7)
正如@sharptooth所说,这需要操作系统的支持。不同的OS有不同的做法。由于您使用的是Windows,因此您可以执行以下几个步骤:
OpenProcess
或CreateProcess
以访问或启动新流程。在此次通话中,您必须请求PROCESS_VM_READ
访问权限。ReadProcessMemory
读取该打开过程中的一块内存。如果您想更改其他流程的内存,则需要PROCESS_VM_WRITE
访问权限并使用WriteProcessMemory
来实现这一目标。
例如,在Linux中,您可以使用ptrace附加到进程并查看其内存。
答案 1 :(得分:1)
您可以从自己的应用程序启动一个进程(另一个程序),并访问它的一些信息(特别是共享内存)。相反是非常困难的,CPU伪造内存地址,因此每个进程都认为它有整个内存可用...
答案 2 :(得分:0)
您可能有兴趣查看Toolhelp32ReadProcessMemory
函数。