编译器扩展SEH(1)
文章目录
- 编译器支持的SEH
- 过滤表达式规则:
- 过滤表达式的3种情况
- 直接写常量值
- 表达式
- 调用函数
编译器支持的SEH
__try{ --------------------------------------->1.挂入链表}__except(过滤表达式)--------------------------------->2.异常过滤{异常处理程序 ------------------------------------>异常处理程序}
过滤表达式规则:
- EXCEPTION_EXECUTE_HANDLER(1)执行except代码
- EXCEPTION_CONTINUE_SEARCH(0)寻找下一个异常处理函数
- 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)相关推荐
- Windows异常学习笔记(四)—— 编译器扩展SEH
Windows异常学习笔记(四)-- 编译器扩展SEH 要点回顾 编译器支持的SEH 过滤表达式 实验一:理解_try_except 实验二:_try_except 嵌套 拓展SEH结构体 scope ...
- 编译器扩展SEH(2)
文章目录 问题 自动挂入的异常处理函数 __try __except嵌套,重复 原始的`_EXCEPTION_REGISTRATION_RECORD`结构体 编译器拓展的_EXCEPTION_REGI ...
- PL/0语言编译器扩展 编译原理课程实践(1)
转眼大学生活就要结束,编译原理课程学的东西很多都忘记了.当时我们编译原理课程实践是PL/0语言编译器扩展,在原有PL/0语言文法进行扩展.我写这次博文一是为了回忆以前学的知识,加深记忆:二是和大家分享 ...
- 编译器扩展-ScriptableWizard
可以创建一个对话框,然后统一修改某些组件的值 public class Change :ScriptableWizard{public int 字段 = 100;/// <summary> ...
- 6.编译器拓展SEH
//1.挂入链表相当于这部分 //fs[0]-> Exception_asm{mov eax, fs:[0]mov temp,eaxlea ecx,Exceptionmov fs:[0],ecx ...
- 编译器扩展-MenuItem
MenuItem MenuItem属性允许你添加菜单项到主菜单和检视面板上下文菜单. 用法1:层级划分以及划线 [MenuItem("龙之介工具箱/起飞")] static voi ...
- c语言程序设计 滴水视频,编程达人滴水中级班视频教程
Java视频教程详情描述: <编程达人滴水中级班视频教程>编程达人来了,N部视频教程让你成为真正的编程达人,融会贯通将是本套视频最大的目的. Java视频教程目录: ├─APC机制 │ ...
- 深入解析结构化异常处理(SEH) - by Matt Pietrek
目录 1.浅析SEH 2.移向更深处 3.编译器层面的SEH 4.扩展的异常处理帧 5.ShowSEHFrames程序 6.展开 7.未处理异常 8.进入地狱 9.结论 尽管以前写过一篇SEH相关的 ...
- 嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)
关注+星标公众号,不错过精彩内容 来源 | 宅学部落 最近,阅读了王工(王利涛)赠送的一本由他编著的书籍<嵌入式C语言自我修养>,感觉写的挺不错.今天分享一下这本书籍<嵌入式C语言自 ...
最新文章
- 通信系统之信道(四)
- Python基础教程:用模块化来搭项目
- 6.0系统设备Xposed框架激活教程
- c 服务器传输大文件,cend.me:不须经过服务器,直接点对点的文件传输免费服务...
- 系统架构师学习笔记-信息系统基础知识
- linux查找、搜索字符或文件
- 商品翻牌效果(纯css)
- lua.c:82:10: fatal error: readline/readline.h: 没有那个文件或目录
- 2021-10-20
- sublime text3怎么运行python代码_Sublime Text3配置在可交互环境下运行python快捷键
- 【步态识别】GaitMPL
- IBM FlashSystem掌控现代存储,靠的是硬实力
- PHP气缸种类,【汽缸】【气缸】|× 【Q】√ - 校对标准:寻找权威依据 - Powered by phpwind...
- app中加载h5页面白屏问题
- 【Python】pass,continue和break的区别
- 什么叫少儿机器人编程
- 会PLC也能玩转机器视觉(二)- 条码识别
- Python 网络爬虫(错误之处,敬请斧正)
- Moon River
- 模型驱动的开发解决方案支撑工具的总结
热门文章
- 成功解决AttributeError: Parent variable ‘<Variable: ID (dtype = numeric)>‘ is not the index of entity En
- TF学习——TF之API:TensorFlow的高级机器学习API—tf.contrib.learn的简介、使用方法、案例应用之详细攻略
- EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模
- 一点点学习PS--实战四
- Hadoop之HDFS(一)HDFS入门及基本Shell命令操作
- fekit前端代码模块化工具
- 在全局中调用类的静态成员函数
- 使用AFNetworking请求新浪微博数据接口出错解决办法
- 漫谈C++重载运算符
- ESP8266编译脚本之五