首页 > 解决方案 > 为什么 ProcDump 在 64 位 Windows 10 下无法记录 32 位进程的内存内容?

问题描述

我想使用 ProcDump 的能力MINIDUMP_TYPE通过-mc命令行开关创建自定义的 minidump 以包含超出MiniDumpNormal.

不幸的是MiniDumpWithFullMemory, MiniDumpWithIndirectlyReferencedMemory,MiniDumpWithPrivateReadWriteMemory | MiniDumpWithPrivateWriteCopyMemory似乎也没有任何效果:创建了一个非空的小型转储,没有显示错误,但比预期的要小很多,并且通过 WinDbg 的.dumpdebug功能查询小型转储不会列出任何上述标志,即使明确包含在小型转储中类型。似乎上面提到的任何标志都不会影响 ProcDump 的行为。

有问题的进程是在 64 位 Windows 10,build 2004 下运行的 32 位进程。我尝试了 procdump.exe 和 procdump64.exe 9.0 版,尽管没有-64命令行开关,因为我不想包含 SysWOW64高架。我还尝试将最新的 Windows SDK 调试工具提供的 32 位和 64 位版本的 dbghelp.dll 复制到 procdump.exe 和 procdump64.exe 所在的相应文件夹中。最后,我确保将 minidump 类型作为十六进制数字传递,并且我尝试过的任何其他标志似乎都可以毫无问题地被识别,并且在之后检查 WinDbg 中的 minidump 时被列出。

例如,调用procdump.exe -mc 51B25 <process>应该创建一个转储

0x51B25 = 334629 = (MiniDumpWithDataSegs 
 | MiniDumpWithProcessThreadData
 | MiniDumpWithHandleData
 | MiniDumpWithPrivateReadWriteMemory
 | MiniDumpWithUnloadedModules
 | MiniDumpWithFullMemoryInfo
 | MiniDumpWithThreadInfo
 | MiniDumpWithTokenInformation
 | MiniDumpWithPrivateWriteCopyMemory)

在 WinDbg 中检查转储时,既不MiniDumpWithPrivateReadWriteMemory也不MiniDumpWithPrivateWriteCopyMemory显示在.dumpdebug相应内存区域不可用的信息中。MiniDumpWriteDump请注意,当我出于演示目的从应用程序中创建转储时,使用时确实会显示标志.dumpdebug,并且生成的小型转储将明显更大(在其他可比较的条件下)。

有人可以确认 ProcDump 确实忽略了与内存相关的标志或向我解释我做错了什么吗?

(使用开关编写 MiniPlus 转储-mp确实有效,但不一定包括感兴趣的内存区域。)

标签: memoryprocesswindbgminidumpprocdump

解决方案


推荐阅读