如何分析 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 ...
随机推荐
- 8.1 服务器开发 API 函数封装,select 优化服务器和客户端
#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <ne ...
- 第十六篇 make中的路径搜索
在实际的工程项目中,源文件和头文件都会组织成一定的目录结构,这样也便于项目的管理,前述我们分析的makefile,源文件和头文件大都在当前目录,没有路径搜索的问题,下面我们引入今天的演示程序的目录结 ...
- PR5
修改字幕的两种方式
- 20155328 2016-2017-2 《Java程序设计》第5周学习总结
教材学习内容总结 程序设计本身的错误,建议使用Exception或其子类实例来表现. Java中所有错误都会被打包成对象. 如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块将永远 ...
- dubbo监控工具
现在企业使用dubbo技术太普遍,所以dubbo的监控工具也应运而生,而且还很稳定,他就是一个web项目, 部署起来非常简单,下载个项目war包(dubbo-admin-2.5.4-SNAPSHOT. ...
- JavaScript中实现最高效的数组乱序方法
数组乱序的意思是,把数组内的所有元素排列顺序打乱. 常用的办法是给数组原生的sort方法传入一个函数,此函数随机返回1或-1,达到随机排列数组元素的目的. 复制代码代码如下: arr.sort(fun ...
- Laravel学习之旅(三)
视图 一.怎么新建视图: 1.视图默认存放路径:resources/views: 2.laravel模板支持原生的PHP,直接可以在resources/views新建一个PHP文件,例如: index ...
- JPEG文件格式
格式:JFIF(JPEG档的交换格式)压缩:JPEG(灰阶影像压缩比约为10:1:彩色影像约为20:1)以JPEG文件格式保存的图像实际上是2个不同格式的混合物:JPEG格式规范本身,用来定义图像的压 ...
- leetcode:Valid Palindrome【Python版】
1.注意空字符串的处理: 2.注意是alphanumeric字符: 3.字符串添加字符直接用+就可以: class Solution: # @param s, a string # @return a ...
- NoSQLUnit
NoSQLUnit Core Overview Unit testing is a method by which the smallest testable part of an applicati ...