news 2026/4/23 15:49:32

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/23 12:11:44

Qwen2.5-VL开源可部署优势:Ollama镜像支持私有化图文分析系统

Qwen2.5-VL开源可部署优势&#xff1a;Ollama镜像支持私有化图文分析系统 1. 为什么Qwen2.5-VL值得你立刻上手 你有没有遇到过这样的问题&#xff1a;一张带表格的财务截图&#xff0c;需要人工逐行录入&#xff1b;一份产品宣传图里嵌着小字说明&#xff0c;却没法直接提取&…

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

GLM-4-9B-Chat-1M部署案例:中小企业用24GB显存实现200万字智能阅读

GLM-4-9B-Chat-1M部署案例&#xff1a;中小企业用24GB显存实现200万字智能阅读 1. 为什么中小企业需要“一次读完200万字”的AI&#xff1f; 你有没有遇到过这些场景&#xff1a; 法务同事花三天通读一份80页的并购协议&#xff0c;反复核对条款细节&#xff0c;生怕漏掉一个…

作者头像 李华
网站建设 2026/4/23 12:12:13

Z-Image-Turbo如何接入LoRA?扩展模型能力指南

Z-Image-Turbo如何接入LoRA&#xff1f;扩展模型能力指南 在AI绘画实践中&#xff0c;一个高性能基础模型只是起点。真正决定创作上限的&#xff0c;是它能否灵活适配你的专属风格——比如固定角色形象、统一画风、品牌视觉规范&#xff0c;或是特定行业术语的理解能力。Z-Ima…

作者头像 李华
网站建设 2026/4/23 12:49:03

一键部署YOLOv10到Jetson:边缘设备上的高效运行

一键部署YOLOv10到Jetson&#xff1a;边缘设备上的高效运行 在智能摄像头、巡检无人机和工业质检终端上&#xff0c;目标检测模型必须“快得看不见延迟&#xff0c;小得塞进边缘芯片”。你是否试过把 YOLOv8 部署到 Jetson Orin 后&#xff0c;发现 NMS 后处理吃掉了近 30% 的…

作者头像 李华
网站建设 2026/4/23 12:52:36

语音识别也能这么简单?CAM++一键启动体验记

语音识别也能这么简单&#xff1f;CAM一键启动体验记 1. 这不是传统语音识别&#xff0c;是说话人验证的“傻瓜相机” 第一次看到CAM这个名字时&#xff0c;我下意识以为又是个需要配环境、调参数、跑训练的深度学习项目。直到我点开镜像文档里那张运行截图——一个干净的网页…

作者头像 李华