news 2026/5/3 8:12:58

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/4/20 21:19:16

VibeVoice-TTS-Web-UI完整教程:从安装到输出

VibeVoice-TTS-Web-UI完整教程&#xff1a;从安装到输出 你是否试过用AI生成一段30分钟的双人访谈音频&#xff0c;结果模型中途崩溃、音色突变、对话轮次错乱&#xff1f;或者反复调整提示词却始终得不到自然的打断和语气起伏&#xff1f;这不是你的操作问题——而是大多数TT…

作者头像 李华
网站建设 2026/5/3 8:07:52

Python PyQt5上位机软件调试技巧:高效排错操作指南

以下是对您提供的博文内容进行 深度润色与结构重构后的专业级技术文章 。整体优化遵循如下原则: ✅ 彻底去除AI痕迹 :摒弃模板化表达、空洞术语堆砌,代之以真实开发者的语气、经验判断与工程直觉; ✅ 强化逻辑流与教学节奏 :不再按“定义→原理→代码”机械分段,…

作者头像 李华
网站建设 2026/5/2 14:09:56

BGE-M3实战教程:对接Elasticsearch实现混合检索增强方案

BGE-M3实战教程&#xff1a;对接Elasticsearch实现混合检索增强方案 1. 为什么需要BGE-M3&#xff1f;从“搜不到”到“精准命中”的真实痛点 你有没有遇到过这样的情况&#xff1a;用户在搜索框里输入“怎么给MacBook重装系统”&#xff0c;结果返回的却是Windows重装教程、…

作者头像 李华
网站建设 2026/4/25 19:55:23

HeyGem单个模式怎么用?手把手教你生成第一个视频

HeyGem单个模式怎么用&#xff1f;手把手教你生成第一个视频 你是不是也试过打开HeyGem系统&#xff0c;看到界面上密密麻麻的按钮和两个大大的上传区域&#xff0c;却不知道从哪下手&#xff1f;别担心——这不是你一个人的困惑。很多刚接触HeyGem的朋友&#xff0c;第一眼就…

作者头像 李华
网站建设 2026/4/23 15:10:10

小白保姆级教程:用阿里开源模型快速搭建中文图片识别系统

小白保姆级教程&#xff1a;用阿里开源模型快速搭建中文图片识别系统 1. 这个系统到底能帮你做什么&#xff1f; 你有没有遇到过这些情况&#xff1a; 想快速知道一张照片里有什么&#xff0c;但翻遍手机相册也找不到关键词&#xff1f;做电商运营时&#xff0c;要给几百张商…

作者头像 李华
网站建设 2026/4/29 13:20:58

为什么推荐Qwen3Guard-Gen-WEB?因为它真的能减少人工复核工作量

为什么推荐Qwen3Guard-Gen-WEB&#xff1f;因为它真的能减少人工复核工作量 在内容安全审核一线干过的朋友都清楚&#xff1a;每天盯着成千上万条AI生成文本&#xff0c;逐条判断是否涉政、涉黄、涉暴、涉诈&#xff0c;眼睛酸、脑子胀、效率低——更糟的是&#xff0c;漏判一…

作者头像 李华