windbg入门教程之异常报告深入解读

软件异常

异常,顾名思义是指不符合预期的时间发生,由应用程序和操作系统抛出的异常叫做软件异常

当然我们均不希望发生这些软件异常,但在实际中却常常会遇到因为不良编码导致的异常,比如访问了空指针、访问非法地址、解析json字符串异常等等。

异常处理

为了应对异常,window系统提供了一些API用于获取异常、处理或者控制异常,
为了理解后续的异常信息,我们先了解三个关于异常的API函数:

  1. GetExceptionCode
  2. GetExceptionInformation
  3. UnhandledExceptionFilter

GetExceptionCode

该API原型如下:

该函数用于获取异常发生时的类型,比如 异常和内存相关,它试图访问非法内存地址,数值为5,是最常见的一种异常。

GetExceptionInformation

该API原型如下:

这个函数返回指向EXCEPTION_POINTERS结构的指针,其结构体信息如下:

UnhandledExceptionFilter

该API原型如下:

参数:

ExceptionInfo指向结构的指针,该结构指定异常的描述和异常时的处理器上下文。此指针是对GetExceptionInformation函数的调用的返回值 。

我们的windows系统会在内部使用 UnhandledExceptionFilter来处理在进程和线程创建期间发生的异常行为。如果我们的程序是在调试模式,异常则会传递给调试器,如果我们程序没有附加调试器,并且该异常未被处理,则windows会将异常通知用户。

获取异常信息

在windbg之初步分析转储文件这篇文章中,已经介绍了如何简单分析dump文件以及!analyze -v命令使用。

下面给出!analyze -v命令的分析结果,用于了解异常和分析异常信息。

异常信息解读

下面分别介绍比较重要的关键字段:

一、各个参数的详解

FAULTING_IP :

即出错的指令地址,指出发生错误时所执行的指令,这的IP值EIP

EXCEPTION_RECORD:

异常记录的地址,即该地址是PEXCEPTION_RECORD类型,并且这里给出了分析异常的命令()这个很重要

ExceptionAdddress:

发生异常的地址

ExceptionCode:

异常所代码的错误码,这是因为非法访问导致的

ExceptionFlag:

异常标志(1,表示不可继续的异常 0,表示可继续的异常)

NumberParameters:

异常相关联的参数,第一个参数是空指针,第二参数是结构体成员地址

FAULTING_THREAD:

发生错误的线程ID

CONTEXT:

是发生异常时的上下文地址,这里给出的地址是0x002afb08 ,这个很重要。

FAULTING_SOURCE_CODE:

给出了执行异常时所对应的源代码,符号表明了异常语句。

STACK_COMMAND:

是堆栈相关的命令,获取程序执行错误时堆栈调用情况,这给出了两个命令, 这个也很重要。

二、STACK_TEXT栈文本

该字段是栈文本信息,它反映了错误堆栈的调用情况,从中可以知道以下两个信息:

  1. 函数执行顺序为从函数到函数,执行GetStudentInfo函数时发生异常。
  2. 每一行中的每列地址分别为 ChildEBP地址、函数返回地址、函数前三个参数,共计五个。

例如:

00d92104参数1 00000000参数2 00000005 参数3 若参数少于三个,按照实际顺序对号入座即可。

总结

在这篇文章总主要介绍了软件异常,以及介绍windows处理异常时的API,着重解读了windows异常报告中重要字段含义,在下一篇文章中,我们会根据该异常报告进行crash根因分析。

参考文章:

https://blog.csdn.net/Ma_Hong_Kai/article/details/83658522

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/using-the–analyze-extension

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0x1e–kmode-exception-not-handled

来源:Jimmy1224

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年8月17日
下一篇 2019年8月17日

相关推荐