如何分析 WindowsDump:Dump 起源与初始设置
https://www.qcloud.com/community/article/511817
转者注:让我感觉以前看蓝屏都白看了~~~原来蓝屏也可以分析具体原因。
适用场景:Windows 系列系统异常宕机(蓝屏)且存在Dump文件(*.dmp)
相关背景解释:众所周知,Windows历史上BUG比较多,无故宕机、程序卡死的例子较多,为了避免无迹象可循的情况,Microsoft 推出 Dump机制在宕机时先进行蓝屏收集宕机前状态,并且可以捕获到导致异常的关键错误,当Windows出现异常Crash时Windows会调用Dump系统来形成一个转储文件(*.dmp),通过特殊工具可以进行分析。
如何确保有Dump文件?
1、 要清楚,Dump文件是Windows启动的一个保险机制,而蓝屏主要是用做给系统争取时间进行收集Dump文件所用,所以一个逻辑是必然会有的,那就是如果蓝屏必然触发Dump机制,Dump机制会根据系统设置进行Mini或Full的收集。
2、 关于Dump文件的大小,如果Dump设置的存放位置不满足Dump文件大小也是不会产生Dump文件:
a) MiniDump文件大小:取决于Windows 运行时内存页大小,比如当前CVM跑的是数据库,那么产生的Dump文件大小就是数据库交换内存的概要信息,比如说16G内存有20%被使用,宕机时所产生的Dump文件就是3.2g的概要信息(即涉及到的进程的大概地址)
b) FullDump文件大小:取决于Windows物理内存大小,FullDump即完整收集模式,将整个系统在宕机时的整个内存运行态进行记录,通常该文件的大小是物理大小的1.0 ~ 1.5倍左右(倍数的浮动取决于虚拟内存交换设置的大小)
3、 所以,要确保有Dump文件,最低条件是:
a) 开启Windows系统的Dump

b) 确保设置的位置剩余空间是物理内存1.5倍以上

c) 若要完整的Dump日志进行分析,请选择完整收集模式

注1:QCloud Windows Server 2008R2为避免磁盘风险,默认不开启FullDump模式,所以如果需要详细Debug文件,则手动开启即可:
如果您想要启用完全内存转储选项,手动设置为 0x1 以下注册表子项下的CrashDumpEnabled注册表项并重新启动 Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
注2:也可以使用Memory Dump Configuration工具进行设置


蓝屏文件俗称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版)
如何分析 WindowsDump:Dump 起源与初始设置的更多相关文章
- Linux gdb分析core dump文件
文章目录1. coredump1.1 coredump简介1.2 coredump的文件存储路径1.3 coredump产生的条件1.4 coredump产生原因2. 测试生成coredump1. c ...
- 2DToolkit官方文档中文版打地鼠教程(一):初始设置
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- linux下生成core dump文件方法及设置
linux下生成core dump文件方法及设置 from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...
- [转载]移动终端浏览器初始设置apple-mobile-web-app-capable
这两句话的确很有用,有了它,手机访问的时候像样了. 原文地址:移动终端浏览器初始设置apple-mobile-web-app-capable作者:素水凌心 移动终端浏览器默认设置视口的宽度和初始规模. ...
- python笔记:#003#PyCharm 的初始设置
PyCharm 的初始设置(知道) 目标 恢复 PyCharm 的初始设置 第一次启动 PyCharm 新建一个 Python 项目 设置 PyCharm 的字体显示 PyCharm 的升级以及其他 ...
- ArcGis恢复初始设置(默认设置、出厂设置)的方法
警告:下面的操作涉及更改操作系统的重要组成部分.必要时,请咨询计算机系统专业人士. 重命名 ESRI 文件夹即对 ArcGIS 恢复出厂设置,因此必须重新安装当前安装的所有第三方工具.自定义脚本和自定 ...
- 安装oracle11g client 【INS-30131】执行安装程序验证所需的初始设置失败的解决方法
今天在服务器(操作系统windows server 2008R2)上安装Oracle11g 客户端,弹出“执行安装程序验证所需的初始设置失败”,如上图.网上找了一些方法,简单整理如下,仅供参考. 问题 ...
- 安装oracle11g INS-30131执行安装程序验证所需的初始设置失败的解决方法
安装oracle11g [INS-30131] 执行安装程序验证所需的初始设置失败. 解决方法 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER 启动 TCP/I ...
- CenOS下安装 Git,Git的初始设置,添加文件,提交文件
一.配置DNS 1,配置DNSvi /etc/resolv.conf加入: 代码如下: nameserver 192.168.0.1 nameserver 8.8.8.8 nameserver 8.8 ...
随机推荐
- 京东Java面试题(一)
1.说一下java类集2.字符串哈西相等,equals相等吗?反过来呢?3.Spring的工作原理,控制控制反转是怎么实现的,自己写过滤器过滤编码怎么实现4.框架的源码有没有看过5.动态代理是怎么实现 ...
- Spring MVC - 拦截器实现 和 用户登陆例子
1.拦截器 SpringMvc中的拦截器实现了HandlerInterceptor接口,通常使用与身份认证,授权和校验,模板视图,统一处理等: public class HanderIntercept ...
- 51Nod 1009:1009 数字1的数量 (思维)
1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的 ...
- SUST OJ 1641: 电子狗的心事
1641: 电子狗的心事 时间限制: 1 Sec 内存限制: 128 MB提交: 192 解决: 14[提交][状态][讨论版] 题目描述 计算机程序世界中有一位孤独的电子狗,这个电子狗每次只能执 ...
- day2-Iptables笔记
1. iptables防火墙简介 Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入.流出.流经服务器的数 ...
- 干了2个月java开发最深的体会
综上为JQuery中ajax的操作,感觉使用多了,和form表单的处理还是非常相似的,只不过实现的功能不一样罢了.学习编程,其实就是学习对数据的流转处理,也即是程序的运行流程,如何从前台获取,传输到服 ...
- dbt- 数据构建工具
dbt(数据构建工具)是一个命令行工具,只需编写select语句即可转换仓库中的数据. dbt处理将这些select语句转换为表和视图.DBT帮助做T的ELT(提取,加载和转换) 的过程-它不提取或加 ...
- adnanh webhook 框架使用
adnanh webhook 支持以下功能: 接收请求 解析header 以及负载以及查询变量 规则检查 执行命令 简单测试 使用docker-compose docker-compose 文件 ve ...
- JVM(下)
持久代:不会被 gc 给轻易回收的,创建后一直存在,持久代在堆内存里面,但是不归 java 程序使用.持久代是 动态 load 的那些 class,局部变量,去 gc 其实也 gc 不了啥 1.8 之 ...
- task optimization
Requirements: Tasks have Dependencies Running the task in Multi thread Links http://en.wikipedia.org ...