蓝屏分析

蓝屏(Blue Screen)Windows中用于提示严重的系统级报错的一种方式。蓝屏一旦出现,Windows系统便宣告终止,只有重新启动才能恢复到桌面环境,所以蓝屏又被称为蓝屏终止(Blue Screen Of Death),简称为BSOD

通过系统的“启动和故障恢复”设置,可以在系统发生错误或崩溃时自动将系统的状态从内存转储到磁盘文件中。Windows系统定义了3种不同的系统转储文件。

l  完整转储(Complete memory dump)

包含产生转储时物理内存中的所有数据,其文件大小通常比物理内存的容量还要大,默认位置为%SystemRoot%\MEMORY.DMP

l  内核转储(Kernel memory dump)

去除了用户进程所使用的内存页,因此文件大小要比完整转储小得多,对于典型的Windows XP系统,其大小为200MB左右,默认位置为%SystemRoot%\MEMORY.DMP

l  小型内存转储(Small memory dump)

默认为64KB,默认位置为%SystemRoot%/MiniDump文件夹下,系统会按照日期加序号的方式来命名该dump文件,因此系统可以保存多个小型内存转储文件。

系统转储文件的格式是不公开的,目前需要使用WinDbg调试器来分析系统转储文件。在WinDbg中打开dump文件,最简单的分析方法是使用WinDbg中的!analyze –v命令,可以自动地完成很多分析工作。一般使用!analyze –v命令,足以分析出蓝屏的原因。

 

 

21.2.16所示,展示了一个完整的!analyze –v命令输出。分析结果中主要包括以下内容:

l   蓝屏停止码描述和参数

包含了停止码及停止码对应的常量、详细描述和每个参数的含义。

l   错误指令位置

包含了导致错误的程序地址、机器码和对应的汇编指令。

l   崩溃分类号

是指赋予这次崩溃的一个分类代码,通常是蓝屏的停止码或停止码加上一个子类号。

l   陷阱帧信息

描述了导致这次蓝屏异常发生时的状态,主要包括当时的寄存器值和异常的错误代码。

l   栈回溯

显示了可疑线程栈上所记录的执行记录,包括函数调用及因为中断或异常而发生的转移,这部分信息对于深入了解导致蓝屏的原因非常重要。例如,本例中从栈回溯结果中可以看出,最终是在win32k!SfnINSTRING函数发生了错误,并发生了转移,转移到了nt!KiTrap0E+0xcc

 

 

l   蓝屏的基本信息

包括导致错误发生所在的模块名称、镜像名称、进一步追查名称和错误ID等信息,以便错误分析软件对大量的转储文件进行自动分析、统计和归档。

 

本文节选自《0day安全:软件漏洞分析技术(第2版)》一书。

 

图书详细信息:http://bvbroadview.blog.51cto.com/3227029/608462