四、基础知识

    在这一段内容中,有的小节可能会包含两个部分,分别是 A 和 B,也有可能只包含 A,如果只包含 A 部分,A 字母会省略。A 是【基础知识】,讲解必要的知识点,B 是【眼见为实】,通过调试证明讲解的知识点。

    
4.1、转储文件的基本知识

        转储文件是进程状态的外在表示。生成转储文件的目的:在不需要对出问题的计算机进行实时访问的情况下,就可以对程序故障进行分析。有了转储文件,调试人员就可以使用调试器的事后调试功能来分析故障。

        共有两种类型的转储文件:

          1)、
完全转储文件(Full Dump)

          2)、
微型转储文件(Mini Dump)

        在完全转储文件中包含了进程的整个内存空间、可执行影响、句柄表和调试器需要使用的其他信息。当使用完全转储文件时不能指定所要收集的数据量。但是,我们可以使用调试器将完全转储文件转换为微型转储文件。

        微型转储文件的内容是可变的,并且能根据使用的转储文件生成器进行定制。在微型转储文件中可以只包含某个线程的信息,也可以包含被转储进程的详细信息。需要注意的是,在最大的微型转储文件中包含的内容要多于在完全转储文件中包含的内容。因此,我们这里只介绍微型转储文件的结构。

        以下是能够生成转储文件的工具列表:

          1)、
Windows Debuggers(Windows 调试器):Windows 调试器可以生成各种不同大小的转储文件,并且能够完全控制转储文件的生成过程。

          2)、
ADPlus:ADPlus 是 Windows 调试工具集中的一个。它的作用相当于一个进程监视器,每当发生崩溃或者挂起时,都能生成转储文件。此外,它还能将崩溃事件通知给用户。

          3)、
Windows 错误报告:Windows错误报告是Microsoft提供的一种服务,用户通过这种服务注册到一个实时的错误报告站点。每当用户的某个应用程序发生错误时,都会将一个错误报告从发生崩溃的机器发送到Windows错误报告站点。然后,在进行事后分析时可以从WER服务中提取崩溃信息(包括转储文件)。        

        
以上都是书里介绍的内容,由于书写的比较早,到现在还有很多其他工具可以生成转储文件,比如:任务管理器,Windbg 调试器,Process Explorer,PCHunter 等,使用起来也很方便,网上学习资料很多,我就不多说了。

        接下来,我们就针对这三种工具分别介绍如何生成转储文件。

        

        
4.1.1、通过调试器生成转储文件

            
A、基础知识

                如果我们想使用调试器生成 DUMP 文件,可以使用【.dump】命令,【.dump /m】表示调试器将生成一个微型转储文件。当然【.dump】命令还有其他的选项,如下:

                  a、生成一个完整的微型转储文件,启动所有选项。在这个文件中将包含完整的内存数据、句柄信息、模块信息、基本的内存信息和线程信息等。相当于使用/mfFhut。

                  f、生成一个微型转储文件,其中包含进程内所有可访问和已提交的内存页。

                  F、生成一个微型转储文件,其中包含调试器在重构整个虚拟内存地址空间时需要的所有基本内存信息。

                  h、生成一个微型转储文件,其中包含句柄信息。

                  u、生成一个微型转储文件,其中包含未卸载模块的信息。注意,这个选项只能在Windows Server 2003上使用。

                  t、生成一个微型转储文件,其中包含线程时间的信息。在线程时间信息中包括创建时间,以及在用户态和内核态中执行的时间。

                  i、生成一个微型转储文件,其中包含辅助内存信息。辅助内存是指由栈指针或者后台存储使用的内存(及其周围的一小块内存)。

                  p、生成一个微型转储文件,其中包含进程环境块和线程环境块。

                  w、生成一个微型转储文件,其中包含所有已提交的读-写私有内存页。

                  d、生成一个微型转储文件,其中包含映像中的所有数据段。

                  c、生成一个微型转储文件,其中包含映像中的所有代码段。

                  r、生成一个微型转储文件,适合于在需要保护隐私的情况中使用。这个选项将删除在重建栈时不需要的任何信息(将这些信息替换为0,包括局部变量)。

                  R、生成一个微型转储文件,适合在需要保护隐私的情况下使用。这个选项将从微型转储文件中删除完整的模块路径,因此将确保用户目录结构的隐私性。

                
举个例子:我们在调试器中执行【.dump /ma /u F:\MyDump.dmp】命令,可以在F盘看到生成 dmp 文件到MyDump_1c90_2024-06-27_15-13-24-466_3660.dmp文件。 .dump命令参数比较多,常用的组合就是/ma,/m 表示生成minidump,/a 表示dmp包含所有信息,/u 参数就是上面说的附加时间和PID信息到文件名。