04 异常的处理流程

Posted onetrainee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04 异常的处理流程相关的知识,希望对你有一定的参考价值。

【太多事情要做了,这部分难度对我来说又很大,先写一下大体框架,到时候具体函数逆向分析过程给写出来】

 

问题:

1. 被调试器如何表明是否处理了异常?

2. 异常处理器是什么?

3. 如果异常到最后都没有被处理,那应该怎么办?

技术图片

 

 

1. 调试器是否处理异常的标志

  调试器使用 WaitForDebugEvent 接收调试事件之后要使用 ContinueDebugEvent 来继续执行被调试程序。

  而ContinueDebugEvent最后一个参数是标志位,如果是 DBG_EXCEPTION_NOT_HANDLE 表示当前系统没有处理异常,而如果是 DBG_CONTINUE,则表示处理异常完成。

  因此,操作系统就可以根据这个标志位来决定走哪里

  技术图片

  注意:如果并没有处理异常,而程序继续执行,则又会触碰该异常,然后继续执行。

2. VEH / SEH - 异常处理器

  这个我们介绍过,就是异常处理器,一个全局一个局部,这个之前介绍过就不比多说了。

 

3. 异常处理最后一道防线 UnhandledExceptionFilter

  在Windows操作系统下,每个线程都包含如下代码。

__try
{
    
}
__except(UnhandledExceptionFilter(GetExceptionInformation())
{
    //终止线程
    //终止进程
}

 

  UnhandledExceptionFilter中没有任何处理异常的代码,它所做的就是如果调试器无法处理,就终止进程或县城。

  会首先调用 GetExceptionInformation() 判断是否存在调试器,则传给调试器去处理并等待调试结果。

  如果调试成功,代码继续执行,否则其会终止进程与线程,弹出程序出错。

 

  技术图片

 

以上是关于04 异常的处理流程的主要内容,如果未能解决你的问题,请参考以下文章

处理异常PLSQL时的程序流程

片段中的getView()导致抛出异常,不确定原因

片段中的 EditText 上的空指针异常 [重复]

使用片段中的处理程序时出现非法状态异常

PCL异常处理:pcl 1.8.13rdpartyoostincludeoost-1_64oost ypeofmsvc ypeof_impl.hpp(125): error(代码片段

Java异常处理机制:try...catch...的执行流程