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. win7右键新建文件夹不见了

    http://zhidao.baidu.com/question/175786636169796084.html 看下注册表文件:reg add "HKEY_CLASSES_ROOT\Dir ...

  2. vim切换显示器乱行问题解决

    http://note.youdao.com/noteshare?id=ccdad950ca154a6b1597cbe2ede07b81

  3. Leetcode 7. 整数反转(待整理)

    1.题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: ...

  4. myeclipse注册机,自己生成注册码

    话不多少,直接上代码 直接可以运行,自己输入key即可 package com.generate.myeclipse.code; import java.io.BufferedReader; impo ...

  5. [DeeplearningAI笔记]卷积神经网络1.2-1.3边缘检测

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.2边缘检测示例 边缘检测可以视为横向边缘检测和纵向边缘检测如下图所示: 边缘检测的原理是通过一个特定构造的卷积核对原始图 ...

  6. Ibatis的resultMap和查询数据的对应关系

    iBatis和MyBatis 中返回数据对应关系 直接进入主题,现在的项目改用MyBatis了,感觉跟iBatis还是不一样的,比如在判断空值上面,iBatis是有标签的<isNotEmpty& ...

  7. 拓扑排序 最大字典序+优先队列 BZOJ 4010

    http://www.lydsy.com/JudgeOnline/problem.php?id=4010 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec  Memory ...

  8. hbase性能调优案例

    hbase性能调优案例 1.人员-角色   人员有多个角色  角色优先级   角色有多个人员   人员 删除添加角色   角色 可以添加删除人员   人员 角色 删除添加   设计思路 person表 ...

  9. [linux]安装code::blocks

    1.安装基本编译环境 $sudo apt-get install build-essential $sudo apt-get install gdb 2.安装codeblock $sudo apt-g ...

  10. 【BZOJ】3998: [TJOI2015]弦论

    [题意]给定长度为n的小写字母字符串S,求第k小子串.n<=5*10^5. 给定T,T=0时不同位置的相同子串算一个,T=1时算多个. [算法]后缀自动机 [题解]对S建立SAM,T=0则每个节 ...