我在寻找一种合理的方法将另一个进程的内存转储到文件中遇到了困难。
经过广泛搜索,我找到了CodeProject上的一篇不错的文章,其中包含了我想要的*大部分*功能: 执行另一个进程的内存十六进制转储。 这篇文章很好地解决了权限问题并奠定了良好的基础。
然而,通过使用这个工具,我发现即使是像干净的Notepad.exe或Calc.exe实例这样的小进程,也会生成一个超过24MB大小的转储文件,而根据任务管理器,进程本身在内存中运行时不到20KB。
这篇文章让我相信,它可能还将共享内存中的内容转储出来,可能是DLL空间之类的东西。例如,对Calc.exe进行转储将包括从Kernel32.dll获取的方法名称(以及可能的内存)的部分:
经过广泛搜索,我找到了CodeProject上的一篇不错的文章,其中包含了我想要的*大部分*功能: 执行另一个进程的内存十六进制转储。 这篇文章很好地解决了权限问题并奠定了良好的基础。
然而,通过使用这个工具,我发现即使是像干净的Notepad.exe或Calc.exe实例这样的小进程,也会生成一个超过24MB大小的转储文件,而根据任务管理器,进程本身在内存中运行时不到20KB。
这篇文章让我相信,它可能还将共享内存中的内容转储出来,可能是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内存,而不是25MB。或者至少比我目前能够得到的更接近。
提前感谢您的建议和指导,非常感谢。
注意:这是一个控制台实用程序,因此 CodeProject 文章中的 GUI 元素并不重要。