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

04 异常的处理流程

时间:2019-11-30 19:20:39      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:处理   lte   except   函数   for   没有   gevent   image   png   

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

 

问题:

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 异常的处理流程

标签:处理   lte   except   函数   for   没有   gevent   image   png   

原文地址:https://www.cnblogs.com/onetrainee/p/11963498.html

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