使用变量地址读取另一个进程的内存

Posted

技术标签:

【中文标题】使用变量地址读取另一个进程的内存【英文标题】:read memory of another process using address of variable 【发布时间】:2013-02-10 17:43:52 【问题描述】:

我想读取进程 A 的内存,但是当进程 A 被处理时。我已经运行了A,它显示了一些变量的地址,我关闭了它。

我在输入 A 变量地址的地方运行了 B。它会导致错误“访问冲突...”。

我使用 Borland C++ builder 和 Windows 7。

有什么方法可以在进程关闭时查看 ram?也许一些工具会帮助我。你能给我在内存释放后通过绝对地址读取内存的工具名称吗? 也许应该是某种检漏仪?

【问题讨论】:

【参考方案1】:

关闭后不知道,但是运行的时候可以用ReadProcessMemory()CreateRemoteThread

【讨论】:

我知道 ReadProccesMemory 但它使用进程的指针(或句柄) 是的,您还必须手动生成进程以获取句柄,或者使用窗口名称中的HPROCESS 等外部机制。 ReadProcessMemory() 是唯一安全的选择。一旦您找到并打开了进程的句柄,该进程将不会完全从内存中消失,直到您关闭它的句柄。您可以使用任何WaitFor...() 系列函数或GetExitCodeProcess() 函数来检测进程何时退出,然后从中读取并关闭它的句柄。 @RemyLebeau 真实真实。【参考方案2】:

在大多数系统上,独立的进程存在于完全独立的虚拟地址空间中。您在一个进程中看到的指针在另一个进程中完全没有意义。

因此,如果你想这样做,你必须明确地共享内存;我不是 Windows 专家,但我相信 CreateSharedMemory() 可能是您需要的。

【讨论】:

我想读取一些现有应用程序(即记事本)的内存,所以我不能修改它。 必须有一些类似于将调试器附加到进程(相当于 linux ptrace)的解决方案,对吧?不过,它可能相当复杂...... [编辑:等等,nvm,刚刚看到 OP 想要在完成运行后读取另一个进程的内存......]

以上是关于使用变量地址读取另一个进程的内存的主要内容,如果未能解决你的问题,请参考以下文章

C++ 仅读取进程范围内的内存地址

进程通信——管道消息队列共享内存信号量

是否可以将变量从一个进程传递到另一个进程?

LINUX:程序和进程

为啥没有给另一个进程访问内存位置的权限?

进程间通信IPC之--共享内存