通过使用windbg pid调试内核来转储用户空间进程的最佳方法是什么?我可以使用windbg从用户空间附加到进程并通过.dump生成崩溃,但是我将如何仅从单个进程从内核执行此操作,而不生成整个内核的崩溃转储?

评论

您是否希望通过这种方式而不是通过用户模式会话来执行此操作/用例?

#1 楼

您应该尝试使用.writemem

例如:

.writemem c:\www.exe 0x400000 0xE3000


其中0x400000是主要可执行文件的映像库。

pEPROCESS->SectionBaseAddress提取它,0xE3000SizeOfImage,如PE头中一样,而c:\www.exe是输出文件。

评论


我想获取该过程的所有关联的内存页面(主要对堆感兴趣)。为每个文件执行一次writemem的工作量很大,因此希望触发崩溃转储,并在可能的情况下自动将所有内容保存在一个文件中。

–gljiva
13年6月27日在8:55

#2 楼

以用户模式(.dump / ma)转储进程将转储其所有虚拟内存。这包括当前已分页到磁盘的内存。在转储过程中将对其进行分页。

内核调试仅接近调试物理内存。因此,即使您设法转储进程的所有物理内存,也只有一部分被称为“ WorkingSet”。这将不是一个完整的转储,尤其是您不能将其用于调试.NET。 >