使用Windbg调试系统弹出的内存不可读错误

步骤:

1. 使用Windbg挂钩到崩溃的进程上面

2. 使用~*k列出所有线程

3. 搜索UnhandledExceptionFilter所在的线程

4. 使用~ns切换到上面崩溃所在的线程,n为线程前面的序号

5.使用kv显示线程调用堆栈

6,可以看到02af7740 7c83ab50 02af7768 7c839b39 02af7770 kernel32!UnhandledExceptionFilter+0x628 (FPO: [Non-Fpo])类似的语句,第一个参数02af7768 此指向 EXCEPTION_POINTERS 结构

0:010> dd 02af7768

02af7768  02af785c 02af7878 02af7794 7c9232a8
02af7778  02af785c 02afffdc 02af7878 02af7830
02af7788  02afdc20 7c9232bc 02afffdc 02af7844
02af7798  7c92327a 02af785c 02afffdc 02af7878
02af77a8  02af7830 7c839ad8 00000001 02af785c
02af77b8  02afffdc 7c94a9ef 02af785c 02afffdc
02af77c8  02af7878 02af7830 7c839ad8 1e817ad0
02af77d8  02af785c 1e817ad0 00000000 00000000


第一个 DWORD 代表异常记录。 若要获取有关异常的类型信息,请请在命令提示符处运行以下: 
.exr first DWORD

0:010> .exr 02af785c
ExceptionAddress: 4ae9f47d (gdiplus!ScanOperation::Blend_sRGB_sRGB_MMX+0x00000043)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000001
   Parameter[1]: 1e817ad0
Attempt to write to address 1e817ad0


第二个 DWORD 是上下文记录。 若要获取上下文的信息,请在命令提示符处运行以下: 
.cxr second DWORD 

0:010> .cxr 02af7878
eax=ffffffff ebx=07188a48 ecx=000003cc edx=000000ff esi=1e817ad0 edi=1e817ad0
eip=4ae9f47d esp=02af7b44 ebp=02af7b58 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010246
gdiplus!ScanOperation::Blend_sRGB_sRGB_MMX+0x43:
4ae9f47d 8907            mov     dword ptr [edi],eax  ds:0023:1e817ad0=????????


posted @ 2013-09-17 12:12  vcerror  阅读(258)  评论(0编辑  收藏  举报