zoukankan      html  css  js  c++  java
  • 用户层异常的派发与处理

    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异常

  • 相关阅读:
    .NET对象克隆的深究(转)
    25条哈佛成功金言 (转)
    __doPostBack()方法研究
    一个好的人事博客
    (转)IIS的inetinfo.exe进程占用CPU达100%解决办法
    .net开发随笔
    visual studio.net已检测到web服务器运行的不是asp.net1.1版"故障的排除
    Infragistics NetAdvantage控件的使用:该关系不是此 DataView 指向的表的父关系
    新的一年开始了
    六种方法,做一名更好的开发者
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12773363.html
Copyright © 2011-2022 走看看