news 2026/4/6 5:33:56

Windows SEH之全局展开

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows SEH之全局展开

Windows SEH之全局展开

这里说说SEH中让人费解的全局展开部分。在此之前先复习一下结构化异常处理的流程:

当异常过滤程序的计算结果为EXCEPTION_EXECUTE_HANDLER时,系统会执行全局展开。

下面这张图片展示了全局展开的流程图(对应上图中全局展开的部分):

当一个异常出现的时候,会从检查当前异常的try块是否可以处理该异常(也就是看看是不是有except块,且Filter的计算结果是否为EXCEPTION_EXECUTE_HANDLER),如果不可以则检查当前try块中是否有finally块,有则执行,然后沿着调用链向上查找(也就是看看上级函数中是否有try-except块可以处理该异常)。如果找到可以处理该异常的except块,则执行异常处理程序,执行结束后从异常处理程序的下一条语句开始继续运行。

示例分析一

下面来看一个例子:

#include<iostream>#include<Windows.h>intExceptionFilter(){std::cout<<"ExceptionFilter"<<std::endl;returnEXCEPTION_EXECUTE_HANDLER;}voidfuncA(){__try{std::cout<<"funcA try"<<std::endl;// exception*(PBYTE)NULL=5;std::cout<<"funcA try end"<<std::endl;}__except(ExceptionFilter()){std::cout<<"funcA ExceptionFilter"<<std::endl;}}voidfuncB(){__try{std::cout<<"funcB try"<<std::endl;funcA();std::cout<<"funcB try end"<<std::endl;}__finally{std::cout<<"funcB finally"<<std::endl;}}voidfuncC(){__try{std::cout<<"funcC try"<<std::endl;funcB();std::cout<<"funcC try end"<<std::endl;}__finally{std::cout<<"funcC finally"<<std::endl;}}intmain(intargc,charconst*argv[]){// C -> B -> AfuncC();return0;}

运行结果如下:

示例分析二

#include<iostream>#include<Windows.h>intExceptionFilter(){std::cout<<"ExceptionFilter"<<std::endl;returnEXCEPTION_EXECUTE_HANDLER;}voidfuncA(){__try{std::cout<<"funcA try"<<std::endl;// exception*(PBYTE)NULL=5;std::cout<<"funcA try end"<<std::endl;}__finally{std::cout<<"funcA finally"<<std::endl;}}voidfuncB(){__try{std::cout<<"funcB try"<<std::endl;funcA();std::cout<<"funcB try end"<<std::endl;}__except(ExceptionFilter()){std::cout<<"funcB ExceptionFilter"<<std::endl;}}voidfuncC(){__try{std::cout<<"funcC try"<<std::endl;funcB();std::cout<<"funcC try end"<<std::endl;}__finally{std::cout<<"funcC finally"<<std::endl;}}intmain(intargc,charconst*argv[]){// C -> B -> AfuncC();return0;}

运行结果如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 21:12:10

Emotion2Vec+功能测评:帧级与整句情感识别表现如何

Emotion2Vec功能测评&#xff1a;帧级与整句情感识别表现如何 1. 这不是“听个音调就判情绪”的玩具系统 你有没有试过用语音助手说“我好累”&#xff0c;结果它回你一句“检测到快乐情绪”&#xff1f;这种让人哭笑不得的识别失误&#xff0c;恰恰暴露了多数语音情感识别工…

作者头像 李华
网站建设 2026/3/31 9:29:33

Z-Image Turbo代码实例:Python调用本地模型避坑指南

Z-Image Turbo代码实例&#xff1a;Python调用本地模型避坑指南 1. 为什么你需要这份指南 你是不是也遇到过这些情况&#xff1a; 下载了Z-Image Turbo模型&#xff0c;一运行就报CUDA out of memory&#xff0c;显存明明还有2GB却提示不够&#xff1b;输入同样的提示词&…

作者头像 李华
网站建设 2026/4/6 0:00:34

AI显微镜-Swin2SR部署:青云QingCloud GPU云主机适配与性能压测报告

AI显微镜-Swin2SR部署&#xff1a;青云QingCloud GPU云主机适配与性能压测报告 1. 什么是AI显微镜-Swin2SR 你有没有遇到过这样的情况&#xff1a;一张刚生成的AI草图只有512512&#xff0c;放大后全是马赛克&#xff1b;一张十年前的老照片发黄模糊&#xff0c;想打印却连人…

作者头像 李华
网站建设 2026/3/24 8:28:47

Clawdbot直连Qwen3-32B实战教程:Web Chat平台API Key分级管理实践

Clawdbot直连Qwen3-32B实战教程&#xff1a;Web Chat平台API Key分级管理实践 1. 为什么需要API Key分级管理 你有没有遇到过这样的情况&#xff1a;团队里不同人用同一个API Key访问大模型服务&#xff0c;结果有人误调用高成本接口&#xff0c;有人把Key不小心贴在公开代码…

作者头像 李华
网站建设 2026/4/1 16:17:08

U盘小问题修复

链接&#xff1a;https://pan.quark.cn/s/e76fa978cc06如果碰到U盘坏了&#xff0c;可以试试这款软件&#xff0c;看能不能修复过来。这款软件不能100%的修复U盘&#xff0c;大家U盘坏了&#xff0c;可以试试软件&#xff0c;但不能保证能成功。打开以后其有4个选择。有“U盘文…

作者头像 李华