异常过滤程序 EXCEPTION_EXECUTE_HANDLER, EXCEPTION_CONTINUE_EXECUTION,EXCEPTION_CONTINUE_SEARCH...

本文介绍了异常处理的三种情况:EXCEPTION_EXECUTE_HANDLER表示异常已处理,控制流进入__except块;EXCEPTION_CONTINUE_EXECUTION表示异常被忽略或修复,程序尝试重新执行异常指令;EXCEPTION_CONTINUE_SEARCH表示未找到合适异常处理模块,系统继续搜索。异常发生在无上层try、finally块时,进程会终止;在finally中使用return可阻止全局展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EXCEPTION_EXECUTE_HANDLER (1) 异常已经被识别,也即当前的这个异常错误,系统已经找到了并能够确认,这个__except模块就是正确的异常处理模块。控制流将进入到__except模块中,当except代码块运行结束后,系统会认为异常已经处理,于是允许应用程序继续执行。

全局展开 异常产生,系统夺回控制权,搜索与try块匹配的except块。因为F1中的try块匹配的是finally,于是系统调用栈中向上搜索到另一个try块,当异常过滤程序计算结果为EXCEPTION_EXECUTE_HANDLER,系统必须进行全局展开。马上在发生异常出的finally块中开始全局展开。寻找所有未完成的finally块的try块


如果一个异常发生在try、finally块中,且在其上层没有try、except,进程立刻终止。即全局展开不会发送,finally块也不会执行。

在finally中放入return可以阻止全局展开进行

//以空格作为分割符的符号个数
//内存复制功能
// test1.cpp : 定义控制台应用程序的入口点。
//
#include <Windows.h>
#include <tchar.h>
#include <winternl.h>
#include <Shlwapi.h>
#include<iostream>

 

int Sub1(const char* v1);
CHAR* Sub2(CHAR*Source, size_t Destination);

 

const char* x = "11 11 1 ssssssssssss";

 


int main()
{
printf("%d\r\n",Sub1(x));
printf("%d\r\n",Sub1(NULL));
printf("%s\r\n", Sub2("11 11 1 ssssssssssss",50));
return 0;

}

int Sub1(const char* v1)
{
int len
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值