zoukankan      html  css  js  c++  java
  • X86SEH分析笔记

    在X86Windows中,函数通过以下步骤来参与SEH:

    1.在自身的栈空间中分配并初始化一个EXCEPT_REGISTRATION(_RECORD)结构体。

    2.在该EXCEPTION_REGISTRATION(_RECORD)挂入当前进程的异常链表。

    当某个函数触发异常时,系统首先通过调用KiDisaptchException来给内核调试器一个机会,如果内核调试器没有处理该异常

    则该机会被转给 RtlDispatchException,这个函数就开始分发该异常。分发过程为:

           从当前线程的异常链表头开始遍历,对于每一个 SEH 注册信息(即 EXCEPTION_REGISTRATION(_RECORD)),调用其 Handler。根据 Handler 的返回值做相应的后续处理:

                   1. 返回 ExceptionContinueExecution,表示 Handler 已经修复了异常触发点,从异常触发点继续执行。

                   2. 返回 ExceptionContinueSearch,表示该 Handler 没有处理该异常,继续遍历异常链表。

                   3. Handler 没有修复异常触发点,但是却能处理该异常(某个 __except 过滤代码返回 EXCEPTION_EXECUTE_HANDLER)。这种情况下,处理完该异常后就从异常解决代码(__except 代码块)继续执行,Handler 不会返回。

           以上是简略的 x86 SEH 流程,其中省略了很多细节,比如展开、错误处理、ExceptionNestedException  ExceptionCollidedUnwind 等等。

    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    JS和C# 里的闭包及闭包在事件中的使用
    ***项目开发记录
    七牛云存储之应用视频上传系统开心得
    二维码及二维码接合短URL的应用
    EF批量添加,删除,修改的扩展
    ngTemplateOutlet递归的问题
    每日新知2019-06-03
    Spring boot初始
    纯前端播放本地音乐
    macbook 安装任意来源
  • 原文地址:https://www.cnblogs.com/yifi/p/6480508.html
Copyright © 2011-2022 走看看