文章目录

  • 编译器支持的SEH
  • 过滤表达式规则:
  • 过滤表达式的3种情况
    • 直接写常量值
    • 表达式
    • 调用函数

编译器支持的SEH

 __try{          --------------------------------------->1.挂入链表}__except(过滤表达式)--------------------------------->2.异常过滤{异常处理程序      ------------------------------------>异常处理程序}

过滤表达式规则:

  1. EXCEPTION_EXECUTE_HANDLER(1)执行except代码
  2. EXCEPTION_CONTINUE_SEARCH(0)寻找下一个异常处理函数
  3. EXCEPTION_CONTINUE_EXECUTION(-1)返回出错位置重新执行

过滤表达式的3种情况

常量值:

__except (1)

情况:去执行except内部代码
表达式:

__except (GetExceptionCode()==0xC0000094?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH)

异常错误是除零异常的话,返回EXCEPTION_EXECUTE_HANDLER(去执行except内部代码),不是除零异常的话就返回EXCEPTION_CONTINUE_SEARCH(寻找下一个异常处理函数)

调用函数

__except (ExceptFilter(GetExceptionInformation()))

这需要看函数内部所进行的操作,这和前面所述SEH和VEH那些执行流程都一样,结构体和参数属性都一样

直接写常量值

代码:

#include<Windows.h>
#include<iostream>void  TestException(){__try{__asm {xor edx,edxxor ecx,ecxmov eax,0x10idiv ecx//EDX:EAX除以ECX}}__except (1) {printf("如果出现异常,我来处理");}}int main() {TestException();
}

表达式

代码:

#include<Windows.h>
#include<iostream>void  TestException(){__try{__asm {xor edx,edxxor ecx,ecxmov eax,0x10idiv ecx//EDX:EAX除以ECX}}
__except (GetExceptionCode()==0xC0000094?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH){printf("如果出现异常,我来处理");}}int main() {TestException();
}

调用函数

代码

#include<Windows.h>
#include<iostream>int ExceptFilter(LPEXCEPTION_POINTERS pExceptionInfo) {pExceptionInfo->ContextRecord->Ecx = 1;return EXCEPTION_CONTINUE_EXECUTION;
}void  TestException(){__try{__asm {xor edx,edxxor ecx,ecxmov eax,0x10idiv ecx//EDX:EAX除以ECX}}__except (ExceptFilter(GetExceptionInformation())) {printf("如果出现异常,我来处理");}}
int main() {TestException();
}

编译器扩展SEH(1)相关推荐

  1. Windows异常学习笔记(四)—— 编译器扩展SEH

    Windows异常学习笔记(四)-- 编译器扩展SEH 要点回顾 编译器支持的SEH 过滤表达式 实验一:理解_try_except 实验二:_try_except 嵌套 拓展SEH结构体 scope ...

  2. 编译器扩展SEH(2)

    文章目录 问题 自动挂入的异常处理函数 __try __except嵌套,重复 原始的`_EXCEPTION_REGISTRATION_RECORD`结构体 编译器拓展的_EXCEPTION_REGI ...

  3. PL/0语言编译器扩展 编译原理课程实践(1)

    转眼大学生活就要结束,编译原理课程学的东西很多都忘记了.当时我们编译原理课程实践是PL/0语言编译器扩展,在原有PL/0语言文法进行扩展.我写这次博文一是为了回忆以前学的知识,加深记忆:二是和大家分享 ...

  4. 编译器扩展-ScriptableWizard

    可以创建一个对话框,然后统一修改某些组件的值 public class Change :ScriptableWizard{public int 字段 = 100;/// <summary> ...

  5. 6.编译器拓展SEH

    //1.挂入链表相当于这部分 //fs[0]-> Exception_asm{mov eax, fs:[0]mov temp,eaxlea ecx,Exceptionmov fs:[0],ecx ...

  6. 编译器扩展-MenuItem

    MenuItem MenuItem属性允许你添加菜单项到主菜单和检视面板上下文菜单. 用法1:层级划分以及划线 [MenuItem("龙之介工具箱/起飞")] static voi ...

  7. c语言程序设计 滴水视频,编程达人滴水中级班视频教程

    Java视频教程详情描述: <编程达人滴水中级班视频教程>编程达人来了,N部视频教程让你成为真正的编程达人,融会贯通将是本套视频最大的目的. Java视频教程目录: ├─APC机制 │  ...

  8. 深入解析结构化异常处理(SEH) - by Matt Pietrek

    目录 1.浅析SEH 2.移向更深处 3.编译器层面的SEH 4.扩展的异常处理帧 5.ShowSEHFrames程序 6.展开 7.未处理异常 8.进入地狱 9.结论 ​尽管以前写过一篇SEH相关的 ...

  9. 嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

    关注+星标公众号,不错过精彩内容 来源 | 宅学部落 最近,阅读了王工(王利涛)赠送的一本由他编著的书籍<嵌入式C语言自我修养>,感觉写的挺不错.今天分享一下这本书籍<嵌入式C语言自 ...

最新文章

  1. 通信系统之信道(四)
  2. Python基础教程:用模块化来搭项目
  3. 6.0系统设备Xposed框架激活教程
  4. c 服务器传输大文件,cend.me:不须经过服务器,直接点对点的文件传输免费服务...
  5. 系统架构师学习笔记-信息系统基础知识
  6. linux查找、搜索字符或文件
  7. 商品翻牌效果(纯css)
  8. lua.c:82:10: fatal error: readline/readline.h: 没有那个文件或目录
  9. 2021-10-20
  10. sublime text3怎么运行python代码_Sublime Text3配置在可交互环境下运行python快捷键
  11. 【步态识别】GaitMPL
  12. IBM FlashSystem掌控现代存储,靠的是硬实力
  13. PHP气缸种类,【汽缸】【气缸】|× 【Q】√ - 校对标准:寻找权威依据 - Powered by phpwind...
  14. app中加载h5页面白屏问题
  15. 【Python】pass,continue和break的区别
  16. 什么叫少儿机器人编程
  17. 会PLC也能玩转机器视觉(二)- 条码识别
  18. Python 网络爬虫(错误之处,敬请斧正)
  19. Moon River
  20. 模型驱动的开发解决方案支撑工具的总结

热门文章

  1. 成功解决AttributeError: Parent variable ‘<Variable: ID (dtype = numeric)>‘ is not the index of entity En
  2. TF学习——TF之API:TensorFlow的高级机器学习API—tf.contrib.learn的简介、使用方法、案例应用之详细攻略
  3. EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模
  4. 一点点学习PS--实战四
  5. Hadoop之HDFS(一)HDFS入门及基本Shell命令操作
  6. fekit前端代码模块化工具
  7. 在全局中调用类的静态成员函数
  8. 使用AFNetworking请求新浪微博数据接口出错解决办法
  9. 漫谈C++重载运算符
  10. ESP8266编译脚本之五