0.ring0-蓝屏dump分析流程详解

http://blog.csdn.net/hgy413/article/details/6451619

以下是自己分析dump的一些经验,个人之见

系统蓝屏后,会先出来一个提示:

也可以通过dump来看到:

打开MSDN对蓝屏的说明:http://msdn.microsoft.com/en-us/library/windows/hardware/hh994433(v=vs.85).aspx

找到0x19的说明:

[cpp] view plaincopy

  1. 0×00000019 BAD_POOL_HEADER

再找到参数1为0x20的地方:

[cpp] view plaincopy

  1. The pool entry that should have been found
  2. The next pool entry
  3. Reserved
  4. The pool block header size is corrupt.

意思堆头大小被破坏,所以应该是堆分配问题!!!!!!!!!!!!!!!

所以看到0×19,第一个参数为20,第一反应是内存操作错误引发的
另一个常见错误是0×50,PAGE_FAULT_IN_NONPAGED_AREA,这种错误一般是对一个无效的地址进行了访问,如

[cpp] view plaincopy

  1. _asm
  2. {
  3. Xor eax,eax
  4. Mov [eax],eax
  5. }

windbg分析(有符号pdb)
这个要注意一下,因为是内核dump,所以如果把它提取出来到本机(不在虚拟机了),先把符号路径设置好(指向它的内核文件Pdb,如虚拟机是XP,就用xp的,再加上它的本地pdb路径)

[cpp] view plaincopy

  1. BugCheck 7E, {c0000005, f889b0d3, f8935b88, f8935884}:和上图一样的效果,指明了蓝屏类型和四个子参数
  2. 0xC0000005: STATUS_ACCESS_VIOLATION indicates a memory access violation occurred:MSDN表明这是个内存访问错误
  3. Probably caused by : BSODCheck.sys ( BSODCheck!IsExitProcess+a3 ):指明了蓝屏引发的驱动
  4. FAULTING_IP:
  5. BSODCheck!IsExitProcess+a3 [e:\bsodcheck\bsodcheck.c @ 41]
  6. f889b0d3 8b08 mov ecx,dword ptr [eax]: 指明了引发蓝屏的实际代码
  7. CONTEXT: f8935884 — (.cxr 0xfffffffff8935884)
  8. eax=00000014 ebx=00000000 ecx=80008138 edx=00000000 esi=e1b3129c edi=827743b8
  9. eip=f889b0d3 esp=f8935c50 ebp=f8935c6c iopl=0 nv up ei pl nz na pe nc
  10. cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=0001020

蓝屏时候的现场上下文环境
这两者结合,一个是案发现场,一个是案发时现场的环境,结合起来才好办案

分析流程:
1.mov ecx,dword ptr [eax]: 指明了引发蓝屏的实际代码
2.eax=00000014:来自案发时现场的环境,这是个无效的值
3.代码:

[cpp] view plaincopy

  1. kd> ub f889b0d3 l4
  2. f889b0c8 8b11           mov  edx,dword ptr [ecx]
  3. f889b0ca 8955f8       mov    dword ptr [ebp-8],edx
  4. f889b0cd 8b45f8       mov    eax,dword ptr [ebp-8]
  5. f889b0d0 0345ec       add    eax,dword ptr [ebp-14h]
  6. kd> u f889b0c8 l30
  7. f889b0c8 8b11           mov  edx,dword ptr [ecx]
  8. f889b0ca 8955f8       mov    dword ptr [ebp-8],edx
  9. f889b0cd 8b45f8       mov    eax,dword ptr [ebp-8]
  10. f889b0d0 0345ec       add    eax,dword ptr [ebp-14h]
  11. f889b0d3 8b08           mov  ecx,dword ptr [eax]
  12. f889b0d5 894dfc       mov    dword ptr [ebp-4],ecx

4.dword ptr [ebp-8]是一个局部变量,保存到eax,Eax+dword ptr [ebp-14h]局部变量
5.结合代码:Segment = *(PULONG)((ULONG)SectionObject + SegmentOffset);时蓝屏了
6.结合案发环境:ebp=f8935c6c:

[cpp] view plaincopy

  1. kd> dd f8935c6c-8 l1
  2. f8935c64 00000000
  3. kd> dd f8935c6c-14 l1
  4. f8935c58 00000014

相加等于14,然后对14做指针取值,挂掉!

//-------------------------------------------------------------------------------------------------------------------------

windbg分析(无符号Pdb,结合IDA)

[cpp] view plaincopy

  1. FOLLOWUP_IP: 案发现场
  2. BSODCheck+10d3
  3. f889b0d3 8b08 mov ecx,dword ptr [eax]
  4. CONTEXT: f8935884 — (.cxr 0xfffffffff8935884):案发现场环境
  5. eax=00000014 ebx=00000000 ecx=80008138 edx=00000000 esi=e1b3129c edi=827743b8
  6. eip=f889b0d3 esp=f8935c50 ebp=f8935c6c iopl=0 nv up ei pl nz na pe nc
  7. cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010206

1.通过7e类型,第一个参数c0000005在MSDN找到这是个内存访问错误
2.查看汇编:

[cpp] view plaincopy

  1. kd> u f889b0ca l4
  2. BSODCheck+0x10ca:
  3. f889b0ca 8955f8 mov dword ptr [ebp-8],edx
  4. f889b0cd 8b45f8 mov eax,dword ptr [ebp-8]
  5. f889b0d0 0345ec add eax,dword ptr [ebp-14h]
  6. f889b0d3 8b08 mov ecx,dword ptr [eax]            // 崩在这里

3.定位特征码:

[cpp] view plaincopy

  1. kd> u f889b0d3
  2. BSODCheck+0x10d3:
  3. f889b0d3 8b08 mov ecx,dword ptr [eax]
  4. f889b0d5 894dfc mov dword ptr [ebp-4],ecx
  5. f889b0d8 8b55fc mov edx,dword ptr [ebp-4]
  6. f889b0db 52 push edx

机器码是:

[cpp] view plaincopy

  1. kd> db f889b0d3 f889b0db
  2. f889b0d3 8b 08 89 4d fc 8b 55 fc-52

4.IDA打开sys,切换到文本模式,搜索特征码:8b 08 89 4d fc 8b 55 fc 52
直接Search–>sequence of bytes或快捷Alt+b

双击即可跳到指定的代码位置,对比就很清楚代码来自哪

时间: 2024-10-11 00:31:31

0.ring0-蓝屏dump分析流程详解的相关文章

Android4.0 input事件输入流程详解(中间层到应用层)

在Android系统中,类似于键盘按键.触摸屏等事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序进行处理.系统启动时,窗口管理服务也会启动,该服务启动过程中,会通过系统输入管理器InputManager来负责监控键盘消息.当某一个Activity激活时,会在该Service下注册一个接收消息的通道,表明可以处理具体的消息,然后当有消息时,InputManager就会分发给当前处于激活状态下的Activity进行处理. InputManager的启动

[nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

:由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . 从GPIO电平变化到产生中断事件的流程详解  1.GPIOTE概览 nRF51上面有32个GPIO,由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) .GP

linux中断流程详解

异常体系比较复杂,但是linux已经准备了很多的函数和框架,但是因为中断是和具体的开发板相关,所以中断需要我们自己来处理一些方面,但是这也是很少的一部分,很多公用的处理函数内核已经实现,linux内核搭建了一个非常容易扩充的中断处理体系. 中 断系统结构涉及的方面很多,而且分布在很多的函数中,这里我主要理清一些结构和流程顺序已经在哪些函数中实现,我不知道其他人怎么样?但是我自己一开始怎 是找不到linux内核是怎么把GPIO设置成中断的,我找了很久都找不到,还有我们很多的设置,初始化等等东西好像

X264编码流程详解(转)

http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如何构建起来一直感觉很神秘,于是决定在理解理论的基础上潜心于编码器实现框架.关于开源的H264编码器有很多,JMVC,T264.X264,这里选择X264,因为网上关于X264源码分析资源很多.X264编码器是一个开源的经过优化的高性能H.264编码器,目前最新的源码在本人的I5处理器的PC机上,编码

Android View measure流程详解

Android View measure流程详解 Android中View绘制的流程包括:measure(测量)->layout(布局)->draw(绘制). 因为Android中每个View都占据了一块矩形的空间,当我们要在屏幕上显示这个矩形的View的时候 首先我们需要知道这个矩形的大小(宽和高)这就对应了View的measure流程. 有了View的宽和高,我们还需要知道View左上角的起点在哪里,右下角的终点在哪里,这就对应了View的layout流程. 当矩形的区域在屏幕上确定之后,

unity3d-配置Android环境,打包发布Apk流程详解

31:unity3d-配置Android环境,打包发布Apk流程详解 作者 阿西纳尼 关注 2016.08.28 22:52 字数 498 阅读 1806评论 0喜欢 5 Unity配置Android环境,打包发布安卓流程 一:SDK与JDK下载地址:http://pan.baidu.com/s/1mhVaXHe下载完成后,解压文件 SDK文件 二.安装 JDK 运行安装程序jdk-7u67-windows-x64 Java-JDK 分别点击下一步进行安装. 安装中 在安装过程中先后会出现两次选

CentOS 5,6 系统启动流程详解

一.linux 组成介绍 1.linux 组成: Linux: kernel+rootfs(根文件系统) kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: 程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 过程调用: procedure,无返回值 函数调用: function 程序:二进制执行文件 2.内核设计流派: 单内核(monolithic kernel): Linux 把所有功能集成于同一个程序 微内核(micro

ssl协议工作流程详解

SSL 协议 (HTTPS) 握手.工作流程详解 (双向 HTTPS 流程 )SSL 协议的工作流程:服务器认证阶段: 1)客户端向服务器发送一个开始信息"Hello"以便开始一个新的会话连接; 2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的"Hello"信息时将包含生成主密钥所需的信息; 3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器; 4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信

CentOS开机流程详解

CentOS开机流程详解 一.linux开机流程: BIOS:(Basic Input Output System)基本输入输出系统,它是一组固化到计算机内主板上一个ROM芯片 上的程序,保存着计算机最重要的基本输入输出的程序.开机后自检程序和系统自启动程序,可从CMOS中读写系统设置的具体信息. MBR:Master Boot Record,主要引导记录区. Boot Loader:启动引导程序. 二.详细流程 第一步:加载BIOS 打开计算机电源,计算机硬件会自动加载BIOS,读取BIOS内