如何分析 WindowsDump:BSOD 分析与 WinDbg 使用(二)
原创适用场景:Windows 系列系统异常宕机(蓝屏)且存在Dump文件(*.dmp)
相关背景解释:众所周知,Windows历史上BUG比较多,无故宕机、程序卡死的例子较多,为了避免无迹象可循的情况,Microsoft 推出 Dump机制在宕机时先进行蓝屏收集宕机前状态,并且可以捕获到导致异常的关键错误,当Windows出现异常Crash时Windows会调用Dump系统来形成一个转储文件(* .dmp),通过特殊工具可以进行分析。
蓝屏文件俗称BSOD(Blue Screen Of Death),一般出现后处理方式就只有重启,蓝屏的产生原因是:
BSOD有三大规则会触发:
- 保护规则:当低级特权的代码直接访问高级特权代码与数据时(如某些安全防护软件通过用户态进行驱动修改)就会触发BSOD;
- 异常处理:程序异常时程序本身没有写好完整的异常处理回路,系统接收到异常则启动先行中断机制,所以程序设计存在问题时也有可能触发蓝屏(比如之前0Day漏洞黑客所用的工具导致蓝屏,明显就是没有写好异常处理回路)
- SDK、DDK中调用了只有在特定IRQL调用的内核参数,即只有特定CPU中断请求的时候才可以使用DDK调用的内核参数在未到中断请求时被发起调用(一般出现于.Net Winform应用中)
在腾讯 云主机 上,一般第一、二规则导致的BSOD Case比较多。
附蓝屏产生过程:
转储原理:
一、 BSOD分析:
虽然BSOD必然会输出Dump文件,但是BSOD也会带来相关有用的信息,一般BSOD呈现方式为:
- 浅蓝框:序言、错误的信息描述
- 中间部分:建议的措施
- 红色框:相关中断的代码及其参数
关于 浅蓝框 跟 中间部分 基本可以忽略,作为排错需要关注的下面红色框的参数,下面具体举个例子:
* STOP:0x0000007F(0xc0000005,0x808945CF,0xF78A6A88,0XF78A6784)
0x0000007F:7F,即导致BSOD的关键代码,通常可以在 https://support.microsoft.com/zh-cn/search 可以搜索到 0xc0000005:5,涉及的进程对象(Process Object) 0x808945CF:对应对象的指针(指向位置)