用户层异常与内核层异常

异常可以发生在用户空间,也可以发生在内核空间。

无论是CPU异常还是模拟异常,是用户层异常还是内核异常,都要通过 KiDispatchException函数进行分发,这个函数比较复杂。

VOID KiDispatchException (IN PEXCEPTION_RECORD ExceptionRecord,IN PKEXCEPTION_FRAME ExceptionFrame,IN PKTRAP_FRAME TrapFrame,IN KPROCESSOR_MODE PreviousMode,IN BOOLEAN FirstChance //TRUE第一次处理该异常,FALSE不是第一次)

没有调试器或者内核调试器没有处理,跳转的地方都是一样的都是这。

RtIDispatchException执行流程(没有调试器或者内核调试器没有处理)

kpcr.ExceptionList结构

typedef struct _EXCEPTION_REGISTRATION_RECORD
{ struct EXCEPTION_REGISTRATION_RECORD* Next;   //下一个节点,如过为-1就是没有下一个节点了PEXCEPTION_ROUTINE Handler; //指向下一个异常处理函数
} EXCEPTION_REGISTRATION_RECORD;

  1. 遍历异常链表,调用异常处理函数,如果异常被正确处理了,该函数返回1
  2. 如果当前异常处理函数不能处理该异常,那么调用下一个,以此类推。
  3. 如果到最后也没有人处理这个异常,返回0。

如果RtIDispatchException返回是1,异常就处理掉了。
将原来的 CONTEXT 放回 Trap_Frame 结构中,异常已经处理掉了不需要返回3环。

如果RtIDispatchException返回是0,异常没有被处理

  1. _KeContextFromKframes将Trap_Frame备份到context为返回3环做准备
  2. 判断先前模式0是内核调用 1是用户层调
  3. 是否是第一次调用
  4. 是否有内核调试器
  5. 如果没有或者内核调试器不处理
  6. 调用 RtIDispatchException
  7. 如果返回TRUE这个分发结束了,异常解决了。
  8. 如果返回FALSE,再次判断是否有内核调试器 有就调用 没有直接蓝屏

2.内核异常处理流程相关推荐

  1. Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发

    Windows异常学习笔记(二)-- 内核异常处理流程&用户异常分发 用户层与内核层异常 内核异常 分析 KiDispatchException 分析 RtlDispatchException ...

  2. 【内核】linux内核启动流程详细分析【转】

    转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...

  3. 【内核】linux内核启动流程详细分析

    Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...

  4. ipqc异常处理流程图_产线异常处理流程

    与<产线异常处理流程>相关的范文 供应商来料异常管理流程 1. 目的: 规范来料产品的异常处理流程控制,提高来料合格率. 2. 范围: 本规范适用于所有外购零部件及外包加工件. 3. 职责 ...

  5. 内核中断处理流程_处理中断

    内核中断处理流程 我只是在观看Heinz Kabutz的VJUG采访 ,这启发了我写一篇有关中断的文章. 顺便说一句,我建议您订阅VJUG YouTube频道 -确实非常有用. Heinz始终是物有所 ...

  6. linux内核ufs设备树,Linux内核初始化流程笔记

    Linux内核初始化流程笔记 分类: LINUX 作者:gfree.wind@http://www.doczj.com/doc/fc580419c1c708a1294a4409.html 博客:htt ...

  7. struts2异常处理流程_Struts2异常处理示例教程

    struts2异常处理流程 Exceptions are common in any application. We try to catch it and process it but someti ...

  8. linux内核启动流程(文章最后流程图)

    原文:linux内核启动流程 本文以Linux3.14版本源码为例分析其启动流程.各版本启动代码略有不同,但核心流程与思想万变不离其宗. 内核映像被加载到内存并获得控制权之后,内核启动流程开始.通常, ...

  9. Apache Pulsar的数据写入和读取流程,及读写异常处理流程

    目录 1. 数据写入流程 2. 数据读取流程 3. 读写异常处理流程 1. 数据写入流程 说明: 写入操作客户端只和broker交互, 不和zookeeper和bookkeeper交互 客户端通过pr ...

最新文章

  1. 用c++写一个猜数字的小游戏
  2. Makefile理解
  3. ul弹性怎么一行显示_css3系列之弹性盒子 flex
  4. R学习笔记:文档间函数调用
  5. 可申请试用!GN4系列GPU云服务器重磅来袭
  6. PHP的swoole扩展安装方法详细教程
  7. storm集群操作指南
  8. 学python哪个网站好-有哪些值得推荐的Python学习网站|
  9. Spark之RDD实战篇3
  10. redis-3.0.0_rc5的RPM包制定
  11. win10电脑怎么升级安装win11正式版,电脑升级win11的方法
  12. Java编程练习题3
  13. 凸二次规划的解法(x取值具有上确界)
  14. 有第三方扩展组件的layui 文档地址
  15. 计算机报名jpg形式,急!什么叫“jpg格式电子照片”?
  16. [渝粤教育] 四川大学 新生研讨课 参考 资料
  17. 细数阿里 25 个开源的前端项目
  18. 将心比心,我要有点骨气
  19. 降维打击 Dimensionality reduction attack
  20. unity3d android访问剪贴板,Airtest 和 poco 的 swipe 接口使用总结

热门文章

  1. ML之DT:基于简单回归问题训练决策树(DIY数据集+三种深度的二元DT性能比较)
  2. NLP之TM:基于gensim库调用20newsgr学习doc-topic分布并保存为train-svm-lda.txt、test-svm-lda.txt
  3. Matlab之mdl:风力发电系统仿真模型power_wind_dfig文件
  4. Java:希望每天叫醒你的不是闹钟而是梦想!
  5. pycharm专业版-2017.3.3 安装+anaconda3-2019.03-windows
  6. jquery 加法 乘法运算 精确计算函数
  7. SQLSERVER2014的内存优化表
  8. 用Visual C#开发简单的复合控件
  9. 强化学习(三)—— 策略学习(Policy-Based)及策略梯度(Policy Gradient)
  10. LR与SVM的相同点和不同点