コンパイラ拡張SEH(1)

コンパイラでサポートされているSEH

	__try{
    
    			--------------------------------------->1.挂入链表

	}__except(过滤表达式)--------------------------------->2.异常过滤
	{
    
    

异常处理程序      ------------------------------------>异常处理程序

	}

フィルタ式のルール:

  1. EXCEPTION_EXECUTE_HANDLER(1)コード以外で実行
  2. EXCEPTION_CONTINUE_SEARCH(0)次の例外処理関数を検索します
  3. EXCEPTION_CONTINUE_EXECUTION(-1)はエラーの場所に戻り、再度実行します

フィルタ式の3つのケース

定数値:

__except (1)

状況:
以外の内部コードを実行する場合

__except (GetExceptionCode()==0xC0000094?EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH) 

例外エラーがゼロ除算例外の場合はEXCEPTION_EXECUTE_HANDLERを返し(内部コードを除く)、ゼロ除算例外でない場合はEXCEPTION_CONTINUE_SEARCHを返します(次の例外処理関数を探します)

関数を呼び出す

__except (ExceptFilter(GetExceptionInformation()))

これは、関数内で実行される操作によって異なります。これは、前述のSEHおよびVEHの実行プロセスと同じであり、構造とパラメーターの属性は同じです。

定数値を直接書き込む

コード:

#include<Windows.h>
#include<iostream>




void  TestException(){
    
    

	__try{
    
    
		__asm {
    
    
			xor edx,edx
			xor ecx,ecx
			mov eax,0x10
			idiv ecx//EDX:EAX除以ECX
		}
	}
		__except (1) {
    
    
	printf("如果出现异常,我来处理");
	}

}

int main() {
    
    
	TestException();
}

ここに画像の説明を挿入

コード:

#include<Windows.h>
#include<iostream>


void  TestException(){
    
    

	__try{
    
    
		__asm {
    
    
			xor edx,edx
			xor ecx,ecx
			mov eax,0x10
			idiv 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,edx
			xor ecx,ecx
			mov eax,0x10
			idiv ecx//EDX:EAX除以ECX
		}
	}
	__except (ExceptFilter(GetExceptionInformation())) {
    
    
	printf("如果出现异常,我来处理");
	}


}
int main() {
    
    
	TestException();
}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/CSNN2019/article/details/113845067