在 C++ 中将整个进程内存读入缓冲区

Jus*_*der 0 c++ memory windows

我想挂起进程并将整个内存读入字节缓冲区。我怎样才能做到这一点?另外如何计算内存大小?我正在考虑使用 ReadProcessMemory

谢谢

Jon*_*art 5

虚拟内存通常不是连续的。(这实际上是重点。)因此,将进程的整个虚拟内存空间复制到单个连续缓冲区中并没有真正意义,而且可能实际上是不可能的。虚拟内存中会有间隙,必须用缓冲区中的某些值来填充。这些差距可能很大,缓冲也可能很大。

执行此类操作(例如用于取证目的)的工具通常会节省内存范围,并使用元数据指示源虚拟内存地址以供以后重新组装。

视窗

您可以首先使用它VirtualQueryEx来发现目标进程的虚拟内存范围。

看到这个问题:枚举内存范围中的页面

然后使用ReadProcessMemory将数据从远程进程的虚拟内存复制到本地进程的缓冲区中。

当然,这些操作都不是原子的。如果目标进程正在运行,则虚拟内存空间可能会在您工作时发生变化。

还提供“工具帮助”API:拍摄快照和查看进程