首先需要有双机调试环境(双机内核调试环境搭建),这里构造一段错误驱动代码(驱动开发环境搭建)
#includeNTSTATUS DriverUnload(PDRIVER_OBJECT pDriver) { DbgPrint("Driver Unloadrn"); } NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pReg) { DbgPrint("Driver Load rn"); PULONG Ptr = 0; *Ptr = 1; pDriver->DriverUnload = DriverUnload; return STATUS_SUCCESS; }
1).虚拟机内执行上述驱动代码引发异常错误
2).Windbg捕获到异常错误
错误码官方解释文档
3).Windbg使用!analyze指令获取具体错误信息
此步骤可以粗略判断引发异常错误的进程以及在哪个内核模块中出现错误
4).Windbg输入k指令获取堆栈信息 kv获取详细堆栈信息
此步骤有时不会达到预期效果.堆栈回溯未必齐全
5).Windbg输入g指令dump内存
dump内存完成后重启虚拟机查看默认DMP文件存储位置
6).将DMP文件拖入Windbg
Windbg成功加载DMP文件
Windbg使用!analyze指令获取详细信息
如果没有源代码情况下就要使用kv或通过异常环境时的堆栈来回溯错误源头
7).如果此时堆栈回溯还不详细Windbg使用 dds esp指令查看
蓝屏大致分析流程如此,如果Windbg首次捕获到异常使用!analyze指令获取信息不完全时可通过DMP文件来具体分析.
通过kv指令回溯堆栈可以详细分析错误源头



