09 編譯器擴充套件SEH

2021-09-11 02:02:57 字數 2881 閱讀 9666

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...