;
//
=================================================
;
//
ex. 1,by Hume,2001,例子1---final型的异常处理
;
//
==================================================
.386
.model flat, stdcall
option casemap :none ;
case
sensitive
include Windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
szCap db
"By Hume[AfO],2001..."
,0
szMsgOK db
"OK,the exceptoin was handled by final handler!"
,0
szMsgERR1 db
"It would never Get here!"
,0
buff db 200 dup(0)
.code
_start:
lea eax,Final_Handler
;调用SetUnhandledExceptionFilter来安装final SEH
invoke SetUnhandledExceptionFilter,eax
xor ecx,ecx
mov eax,200
cdq
div ecx
;以下永远不会被执行
invoke MessageBox,NULL,addr szMsgERR1,addr szCap,MB_OK+MB_ICONEXCLAMATION
invoke ExitProcess,NULL
Final_Handler:
invoke MessageBox,NULL,addr szMsgOK,addr szCap,MB_OK+MB_ICONEXCLAMATION
mov eax,EXCEPTION_EXECUTE_HANDLER ;== 1 这时不出现非法操作的讨厌对话框
;mov eax,EXCEPTION_CONTINUE_SEARCH ;== 0 出现,这时是调用系统默认的异常处理过程,程序被终结了
;mov eax,EXCEPTION_CONTINUE_EXECUTION
;==-1不断出现对话框,将陷入死循环
;因为我们并没有修复ecx,所以不断产生异常,然后不断调用这个例程
;可以被执行了!我自己加的
invoke MessageBox,NULL,addr szMsgERR1,addr szCap,MB_OK+MB_ICONEXCLAMATION
ret
end _start