1、_try _finally程式塊
_tryfinally
2、_try _finally程式塊特徵測試**
#include #include void testexception()
_finally }
}int main()
第一種情況continue結果:
第二種情況break結果:
第三種return情況結果:
2、區域性展開
展開時機:
當_try _finally中_try提前跳出流程**塊時會產生
如:continue break return 等
用下面**測試:
#include #include void testexception()
_finally
}int main()
testexception函式反彙編:
4: void testexception()
5:
11: _finally
14: }
0040bfa7 mov ecx,dword ptr [ebp-10h]
0040bfaa mov dword ptr fs:[0],ecx
0040bfb1 pop edi
0040bfb2 pop esi
0040bfb3 pop ebx
0040bfb4 add esp,58h
0040bfb7 cmp ebp,esp
0040bfb9 call __chkesp (00401690)
0040bfbe mov esp,ebp
0040bfc0 pop ebp
0040bfc1 ret
跟進區域性展開函式
__local_unwind2:
004011c6 push ebx
004011c7 push esi
004011c8 push edi
004011c9 mov eax,dword ptr [esp+10h]
004011cd push eax
004011ce push 0feh
004011d0 push offset __global_unwind2+20h (004011a4)
004011d5 push dword ptr fs:[0]
004011dc mov dword ptr fs:[0],esp
004011e3 mov eax,dword ptr [esp+20h]
004011e7 mov ebx,dword ptr [eax+8]
004011ea mov esi,dword ptr [eax+0ch]
004011ed cmp esi,0ffh
004011f0 je __nlg_return2+2 (00401220)
004011f2 cmp esi,dword ptr [esp+24h]
004011f6 je __nlg_return2+2 (00401220)
004011f8 lea esi,[esi+esi*2]
004011fb mov ecx,dword ptr [ebx+esi*4]
004011fe mov dword ptr [esp+8],ecx
00401202 mov dword ptr [eax+0ch],ecx
00401205 cmp dword ptr [ebx+esi*4+4],0
0040120a jne __nlg_return2 (0040121e)
0040120c push 101h
00401211 mov eax,dword ptr [ebx+esi*4+8]
00401215 call __nlg_notify (0040125a)
0040121a call dword ptr [ebx+esi*4+8] //這裡呼叫了乙個函式,這就是我們finally的**
3、全域性展開
展開時機:
執行_except**之前,會重新從宜昌發生位置遍歷一次_finally,如果存在著一次呼叫區域性展開函式
#include #include void testexception()
_finally
} _finally
} _except(1)
}int main()
編譯器擴充套件SEH 1
try except 過濾表示式 2.異常過濾 exception execute handler 1 執行except exception continue search 0 尋找下乙個異常處理函式 exception continue execution 1 返回出錯位置重新執行 常量值 exc...
C 學習(9) 配置編譯器 編譯器擴充套件
亞歷克斯於2018年9月19日 最後由alex於2018年9月26日修改 c 標準定義了程式在特定情況下應如何表現的規則。在大多數情況下,編譯器將遵循這些規則。但是,許多編譯器實現了對語言的更改,通常是為了增強與其他語言版本 例如c99 的相容性,或者出於歷史原因。這些特定於編譯器的行為稱為編譯器擴...
Web編譯器Visual Studio擴充套件
乙個visual studio擴充套件,用於編譯less,sass,jsx,es6和coffeescript檔案。請參閱更改日誌 以了解更改和路線圖。右鍵單擊,然後.less,scss,styl,jsx,es6或.coffee在solution explorer檔案來設定編譯。呼叫的檔案compil...