SEH是对windows系统中的异常分发和处理机制的总称,其实现分布在很多不同的模块中。

SEH提供了终结处理异常处理两种功能。

终结处理保证终结处理块中的程序一定会被执行

 __try
{
//要保护的代码
}
__finally
{
//终结处理块
}

退出保护块的方式:正常结束和非正常结束两种

1.正常结束

正常执行并顺序进入终结处理块称为正常结束

2.非正常结束

因为发生异常或是因为return、goto、break、continue等流程控制语句而离开被保护块的称为非正常结束

在终结处理块中使用AbnormalTermination获取被保护块的退出方式。

__leave关键字在被保护块中使用,立即结束被保护块。属于正常退出。

异常处理功能用于处理异常

 __try
{
//被保护块
}
__except(过滤表达式)
{
//异常处理块
}

提供了两个宏,可在过滤表达式或异常处理块内使用

GetExceptionCode()返回异常代码

GetExceptionInformation()返回一个EXCEPTION_POINTERS结构中

 typedef struct _EXCEPTION_POINTERS {
PEXCEPTION_RECORD ExceptionRecord;//异常记录指针
PCONTEXT ContextRecord;//线程上下文指针
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;

过滤表达式可以是常量,函数调用也可以是条件表达式,但最后值必须是1、0、-1之一。

EXCEPTION_CONTINUE_SEARCH(0)本保护块不处理异常,系统继续搜索其他保护块

EXCEPTION_CONTINUE_EXECUTION(1)已经处理异常,程序回到异常点继续运行

EXCEPTION_EXECUTE_HANDLE(-1)让本保护块来处理这个

CONTEXT结构是用于恢复线程执行用的,其中保持了线程上下文。

在现实中,由于各种情况过滤表达式很难把异常处理到继续运行的情况。

所以VC规定C++异常的异常过滤函数禁止返回EXCEPTION_CONTINUE_EXECUTION,即禁止回到异常点继续运行。

栈展开,由于异常处理导致程序的函数执行流程出现跳跃性,所以要把栈恢复到合适执行的位置(情况),

Windows内核读书笔记——SEH结构化异常处理的更多相关文章

  1. 异常处理第三讲,SEH(结构化异常处理),异常展开问题

    异常处理第三讲,SEH(结构化异常处理),异常展开问题 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 不知道昨天有木有 ...

  2. 第23章 SEH结构化异常处理(1)_系统SEH机制

    23.1 基础知识 23.1.1 Windows下的软件异常 (1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障.陷阱和终止三类. (2)两种异常处理机制: ...

  3. 第23章 SEH结构化异常处理(2)_编译器对系统SEH机制的封装

    23.2 编译器层面对系统SEH机制的封装 23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION (1)VC_EXCEPTIO ...

  4. Windows内核读书笔记——Windows异常分发处理机制

    本篇读书笔记主要参考自<深入解析Windows操作系统>和<软件调试>这两本书. IDT是处理异常,实现操作系统与CPU的交互的关口. 系统在初始化阶段会去填写这个结构. ID ...

  5. 第25章 SEH结构化异常处理_未处理异常及向量化异常

    25.1 UnhandledExceptionFilter函数详解 25.1.1 BaseProcessStart伪代码(Kernel32内部) void BaseProcessStart(PVOID ...

  6. 第24章 SEH结构化异常处理_异常处理及软件异常

    24.1  程序的结构 (1)try/except框架 __try{ //被保护的代码块 …… } __except(except fileter/*异常过滤程序*/){ //异常处理程序 } (2) ...

  7. 第23章 SEH结构化异常处理(3)_终止处理程序

    23.3 终止处理程序 23.3.1 程序的结构 (1)框架 __try{ //被保护的代码块 …… } __finally{ //终止处理 } (2)__try/__finally的特点 ①fina ...

  8. 深入研究 Win32 结构化异常处理(作者博客有许多SEH的研究文章)

    摘要 就像人们常说的那样,Win32 结构化异常处理(SEH)是一个操作系统提供的服务.你能找到的所有关于 SEH 的文档讲的都是针对某个特定编译器的.建立在操作系统层之上的封装库.我将从 SEH 的 ...

  9. [C++]深入解析结构化异常处理(SEH)

    http://www.cppblog.com/weiym/archive/2015/02/27/209884.html 尽管以前写过一篇SEH相关的文章<关于SEH的简单总结>, 但那真的 ...

随机推荐

  1. Java试题二

    QUESTION 37Given:1. class Super {2. private int a;3. protected Super(int a) { this.a = a; }4. } ...1 ...

  2. Hive(四)hive函数与hive shell

    一.hive函数 1.hive内置函数 (1)内容较多,见< Hive 官方文档>            https://cwiki.apache.org/confluence/displ ...

  3. python基础----元类metaclass

    1 引子 class Foo: pass f1=Foo() #f1是通过Foo类实例化的对象 python中一切皆是对象,类本身也是一个对象,当使用关键字class的时候,python解释器在加载cl ...

  4. 框架----Django之Form提交验证(二)

    一.Form提交验证之(学生表.老师表.班级表)的添加和编辑实现案例 1. 浏览器访问 http://127.0.0.1:8000/student_list/ http://127.0.0.1:800 ...

  5. OpenCV图像变换(仿射变换与透视变换)

    仿射变换(affine transform)与透视变换(perspective transform)在图像还原.图像局部变化处理方面有重要意义.通常,在2D平面中,仿射变换的应用较多,而在3D平面中, ...

  6. CollectionUtils.isEqualCollection的用法

    在使用Java的集合时,有些时候会需要比较两个集合是否相等,自己写方法其实也简单,但是既然有了好的实现,就不要自己造轮子了,只要了解这个轮子是什么原理就好了. public static boolea ...

  7. java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处.  http://www.cnblogs.com/king-xg/p/6370890.html 如果觉得对您有 ...

  8. [DeeplearningAI笔记]序列模型3.7-3.8注意力模型

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.7注意力模型直观理解Attention model intuition 长序列问题 The problem of ...

  9. Redhat安装配置VNC服务器

    1. 检查安装VNC服务器 # rpm -qa|grep vnc 如果返回信息中有tigervnc-server,说明已安装了VNC:如果没有: # yum install tigervnc # yu ...

  10. JVM调优总结(6):新一代的垃圾回收算法

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...