码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-09-26 08:09:09      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:

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.    
  7. kd> u f889b0c8 l30  
  8. f889b0c8 8b11           mov  edx,dword ptr [ecx]  
  9. f889b0ca 8955f8       mov    dword ptr [ebp-8],edx  
  10. f889b0cd 8b45f8       mov    eax,dword ptr [ebp-8]  
  11. f889b0d0 0345ec       add    eax,dword ptr [ebp-14h]  
  12. f889b0d3 8b08           mov  ecx,dword ptr [eax]  
  13. 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

技术分享

 

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

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

标签:

原文地址:http://www.cnblogs.com/gamekk/p/4839934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!