• 用户层异常的派发与处理


    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

    用户层异常的派发与处理

    1. 用户层异常的派发(KiDisaptchException函数)

      用户层中出现的异常在KiDispatchException比较准确,其详细如下所示:

      1)其调用内核调试器还是存在条件的:

        存在KiDebugRoutine;DebugPort不为空;并且如果是int3断点异常其必须所带的第一个参数不为零,这才会引发内核调试器。

        其实你在实际操作的情况也有这种感觉,明明开着内核调试器windbg,但OD等操作windbg却接收不到,就是这个KdIsThisAkdTrap函数作怪。

      2)构造三环栈中数据返回三环:

        如下图所示,其存在四次复制,赋值的信息比较明显,形成的堆栈图也比较清晰,其返回三环是ntdll!KeUserExceptionDispatcher函数,其负责对异常的处理。

        

    2.ntdll!KiUserExceptionDispatcher函数分析

      返回三环后,可以看到其调用一个RtlDispatchException。

      注意,在处理内核异常时,也有一个同名的RtlDispatchException,那是内核模块,这是三环模块。

      RtlDispatchException可以认为是异常的核心,区别是如果在内核模块,则处理零环,如果在ntdll模块,则处理三环。

      这样你就能很好的区分两者的作用了。

        

    3. ntdll!RtlDispatchException函数分析

      其处理两种异常,一种VEH异常,一种SEH异常。

      VEH异常相当于一个全局变量的异常链表,其通过全局变量查找该张表。

      SEH异常相当于局部异常,其Try··catch··就是向这里面添加异常,TEB、KPCR第一个成员都是这个ExceptionList。

      我们先分析这里,之后会分析VEH异常与SEH异常,之后再来分析这个函数。

        

    4. VEH异常与SEH异常的处理

      为避免篇幅过多,我们另起篇幅来分析SEH异常与VEH异常,传送门:

      ① 用户层异常的处理 - VEH异常

  • 相关阅读:
    delphi Base64
    delphi 注册表
    二、Spring Boot项目的三种启动方式
    Junit的运行流程以及Junit常用注解
    eclips集成单元测试
    六、AcriveMQ集群配置的三种方式,以及组合实现
    五、Sping 中实现简单实现activeMQ
    三、简单实现activeMQ发送消息
    二、安装ActiveMQ消息中间件
    一、消息中间件基础
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12773363.html
Copyright © 2020-2023  润新知