2.内核异常处理流程
用户层异常与内核层异常
异常可以发生在用户空间,也可以发生在内核空间。
无论是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
- 如果当前异常处理函数不能处理该异常,那么调用下一个,以此类推。
- 如果到最后也没有人处理这个异常,返回0。
如果RtIDispatchException返回是1,异常就处理掉了。
将原来的 CONTEXT 放回 Trap_Frame 结构中,异常已经处理掉了不需要返回3环。
如果RtIDispatchException返回是0,异常没有被处理
- _KeContextFromKframes将Trap_Frame备份到context为返回3环做准备
- 判断先前模式0是内核调用 1是用户层调
- 是否是第一次调用
- 是否有内核调试器
- 如果没有或者内核调试器不处理
- 调用 RtIDispatchException
- 如果返回TRUE这个分发结束了,异常解决了。
- 如果返回FALSE,再次判断是否有内核调试器 有就调用 没有直接蓝屏
2.内核异常处理流程相关推荐
- Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发
Windows异常学习笔记(二)-- 内核异常处理流程&用户异常分发 用户层与内核层异常 内核异常 分析 KiDispatchException 分析 RtlDispatchException ...
- 【内核】linux内核启动流程详细分析【转】
转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...
- 【内核】linux内核启动流程详细分析
Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...
- ipqc异常处理流程图_产线异常处理流程
与<产线异常处理流程>相关的范文 供应商来料异常管理流程 1. 目的: 规范来料产品的异常处理流程控制,提高来料合格率. 2. 范围: 本规范适用于所有外购零部件及外包加工件. 3. 职责 ...
- 内核中断处理流程_处理中断
内核中断处理流程 我只是在观看Heinz Kabutz的VJUG采访 ,这启发了我写一篇有关中断的文章. 顺便说一句,我建议您订阅VJUG YouTube频道 -确实非常有用. Heinz始终是物有所 ...
- linux内核ufs设备树,Linux内核初始化流程笔记
Linux内核初始化流程笔记 分类: LINUX 作者:gfree.wind@http://www.doczj.com/doc/fc580419c1c708a1294a4409.html 博客:htt ...
- struts2异常处理流程_Struts2异常处理示例教程
struts2异常处理流程 Exceptions are common in any application. We try to catch it and process it but someti ...
- linux内核启动流程(文章最后流程图)
原文:linux内核启动流程 本文以Linux3.14版本源码为例分析其启动流程.各版本启动代码略有不同,但核心流程与思想万变不离其宗. 内核映像被加载到内存并获得控制权之后,内核启动流程开始.通常, ...
- Apache Pulsar的数据写入和读取流程,及读写异常处理流程
目录 1. 数据写入流程 2. 数据读取流程 3. 读写异常处理流程 1. 数据写入流程 说明: 写入操作客户端只和broker交互, 不和zookeeper和bookkeeper交互 客户端通过pr ...
最新文章
- 用c++写一个猜数字的小游戏
- Makefile理解
- ul弹性怎么一行显示_css3系列之弹性盒子 flex
- R学习笔记:文档间函数调用
- 可申请试用!GN4系列GPU云服务器重磅来袭
- PHP的swoole扩展安装方法详细教程
- storm集群操作指南
- 学python哪个网站好-有哪些值得推荐的Python学习网站|
- Spark之RDD实战篇3
- redis-3.0.0_rc5的RPM包制定
- win10电脑怎么升级安装win11正式版,电脑升级win11的方法
- Java编程练习题3
- 凸二次规划的解法(x取值具有上确界)
- 有第三方扩展组件的layui 文档地址
- 计算机报名jpg形式,急!什么叫“jpg格式电子照片”?
- [渝粤教育] 四川大学 新生研讨课 参考 资料
- 细数阿里 25 个开源的前端项目
- 将心比心,我要有点骨气
- 降维打击 Dimensionality reduction attack
- unity3d android访问剪贴板,Airtest 和 poco 的 swipe 接口使用总结
热门文章
- ML之DT:基于简单回归问题训练决策树(DIY数据集+三种深度的二元DT性能比较)
- NLP之TM:基于gensim库调用20newsgr学习doc-topic分布并保存为train-svm-lda.txt、test-svm-lda.txt
- Matlab之mdl:风力发电系统仿真模型power_wind_dfig文件
- Java:希望每天叫醒你的不是闹钟而是梦想!
- pycharm专业版-2017.3.3 安装+anaconda3-2019.03-windows
- jquery 加法 乘法运算 精确计算函数
- SQLSERVER2014的内存优化表
- 用Visual C#开发简单的复合控件
- 强化学习(三)—— 策略学习(Policy-Based)及策略梯度(Policy Gradient)
- LR与SVM的相同点和不同点