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
  • 相关阅读:
    C++ 与 C 的预处理能力
    unicore32linuxgcc 预定义宏
    内核中的原子上下文
    ConText
    PREEMPT_ACTIVE
    对象和类
    java的getClass()函数
    堆栈以及对象的引用
    public、protected、default、private作用域
    android 环境变量搭建
  • 原文地址:https://www.cnblogs.com/yifi/p/6480508.html
Copyright © 2011-2022 走看看