【发布时间】:2009-08-18 22:35:31
【问题描述】:
我无法找到一种合理的方法将另一个进程的内存转储到文件中。
经过大量搜索,我在 CodeProject 上找到了一篇不错的文章,其中包含我想要的*大多数*功能: Performing a hex dump of another process's memory. 这很好地解决了权限问题并奠定了良好的基础。
但是,使用此实用程序,我发现即使是一个小进程(例如干净的 Notepad.exe 或 Calc.exe 实例)也可以生成大小超过 24MB 的转储文件,而进程本身在内存中运行的内存不足 20KB根据TaskManager。
这篇文章让我相信它可能也在共享内存中转储东西,可能是 DLL 空间等。例如,Calc.exe 的转储将包括包含来自 Kernel32.dll 的方法名称(可能还有内存)的部分:
²³´µKERNEL32.dll ActivateActCtx AddAtomA AddAtomW AddConsoleAliasA AddConsoleAliasW AddLocalAlternateComputerNameA AddLocalAlternateComputerNameW AddRefActCtx AddVectoredExceptionHandler AllocConsole AllocateUserPhysicalPages AreFileApisANSI AssignProcessToJobObject AttachConsole BackupRead BackupSeek BackupWrite BaseCheckAppcompatCache BaseCleanupAppcompatCache
是否有更好的方法来转储不会导致此开销的另一个进程的内存,或者可能是对解决此问题的链接文章代码的改进?我想获得实际上属于进程本身的内存。我可以转储 DLL 中实际使用的函数的内存空间,但似乎没有必要转储多个 DLL 的*整个*内容来获取进程的运行内存。
我正在寻找一种方法来获取 30KB 进程的 30-60KB,而不是 30KB 进程的 25MB。或者至少比我目前能得到的更近。
提前感谢您的建议和指导,不胜感激。
注意:这是针对控制台实用程序的,因此 CodeProject 文章中的 GUI 元素并不重要。
【问题讨论】: