前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何分析 WindowsDump:BSOD 分析与 WinDbg 使用(二)

如何分析 WindowsDump:BSOD 分析与 WinDbg 使用(二)

原创
作者头像
李斯达
修改2017-10-13 19:28:27
6K2
修改2017-10-13 19:28:27
举报
文章被收录于专栏:VMCloudVMCloud

适用场景: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:对应对象的指针(指向位置) 0xF78A6A88:进程涉及的映像名 0XF78A6784:备注解析信息等

二、Dump文件分析

1、 WinDbg工具环境准备,配置好symbol 路径,使其用相关Debug命令时可以自动加载对应module(Minidump可能信息提供较少):

2、 设置Path路径为SRVD:\sysmbolshttp://msdl.microsoft.com/download/symbols 使其在加载相关module(最常见就是NT)时自动从mircosoft 进行下载

Eg:Open Crash Dump时自动加载涉及到的Module:

对应文件夹出现相关Modeule:

3、 打开*.dmp文件:

4、 初始界面如下:

5、 点击!analyze –v 可以进行自动分析,可以看到这个Dump是因为底层调用netkvm.sys导致crash:

6、 但是大部分Crash并不是如例子所示就可以明确看出涉及的驱动进程,所以可以使用!process [0,0]查看crash时hang住的进程:

7、 通过!thread 可以到进程中涉及的线程信息(可以看到这里是Idel时系统Crash掉):

8、 如果是系统组件导致的问题的,可以通过lm kv 导出加载的内核模块:

9、 !vm 可以看出crash时内存状态(可以看到用户的 175ptServer.exe 进程占用较高):

10、 当然也可以通过memory视图来定位thread hang在什么位置:

11、 WinDbg提供大量其他视图可以辅助定位原因,可以根据实际case进行灵活使用(比如Disassembly视图也是很好用的一个功能):

后言

Windows系统方面的 MiniDump提供信息较少,FullDump在Memory这块信息会比较多,具体使用方法需要根据具体Case来灵活调整使用。

附常见命令:

(1)进程: !process [0 0];dt nt!_eprocess;dt nt!_kprocess; (2)线程: !thread;dt nt!_ethread;dt nt!_kthread; (3)I/O请求包: dt nt!_irp;!irpfind; (4)常见同步对象:lkd> dt nt!_kevent;lkd> dt nt!_kmutant;lkd> dt nt!_ksemaphore; (5)作业:lkd> !job;会话(lkd> !session);内存管理(lkd> !vm)的命令等。

附件是WinDbg使用指南(English版)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 BSOD分析:
  • 二、Dump文件分析
  • 后言
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档