使用变量地址读取另一个进程的内存
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()
可能是您需要的。
【讨论】:
我想读取一些现有应用程序(即记事本)的内存,所以我不能修改它。 必须有一些类似于将调试器附加到进程(相当于 linuxptrace
)的解决方案,对吧?不过,它可能相当复杂...... [编辑:等等,nvm,刚刚看到 OP 想要在完成运行后读取另一个进程的内存......]以上是关于使用变量地址读取另一个进程的内存的主要内容,如果未能解决你的问题,请参考以下文章