seh

seh

windows系統的結構化異常處理
SEH("Structured Exception Handling"),即結構化異常處理·是(windows)操作系統提供給程序設計者的強有力的處理程序錯誤或異常的武器。[1]編譯器所提供的包裝,照樣可以利用系統提供的強大seh處理功能,在後面你将可以看到,用系統本身提供seh結構和規則以及ASM語言,我們将對SEH的機制以及實現有一個徹底的了解.。SetUnhandled Exception Filter安裝了最後異常處理例程的話,系統轉向對它的調用。
    中文名:名稱:SEH系列UPS 外文名:Structured Exception Handling 所屬學科: 别名:結構化異常處理· 型号::SET-UPS-SEH

定義

SEH是Windows系統提供的功能,跟開發工具無關。值得一提的是,VC将SEH進行了封裝try catch finally,c++中也可以用c的封裝__try{}__except(){}和__try{}__finally{}.所以當你建立一個C++try塊時,編譯器就生成一個SEH__try塊。一個C++catch測試變成一個SEH異常過濾器,并且catch中的代碼變成SEH__except塊中的代碼。實際上,當你寫一條C++throw語句時,編譯器就生成一個對Windows的Raise Exception函數的調用。用于throw語句的變量傳遞給Raise Exception作為附加的參數。

發生異常時系統的處理順序

1.系統首先判斷異常是否應發送給目标程序的異常處理例程,如果決定應該發送,并且目标程序正在被調試,則系統挂起程序并向

調試器發送EXCEPTION_DEBUG_EVENT消息.呵呵,這不是正好可以用來探測調試器的存在嗎?

2.如果你的程序沒有被調試或者調試器未能處理異常,系統就會繼續查找你是否安裝了線程相關的異常處理例程,如果你安裝了線程相關的異常處理例程,系統就把異常發送給你的程序seh處理例程,交由其處理.

3.每個線程相關的異常處理例程可以處理或者不處理這個異常,如果他不處理并且安裝了多個線程相關的異常處理例程,可交由鍊起來的其他例程處理.

4.如果這些例程均選擇不處理異常,如果程序處于被調試狀态,操作系統仍會再次挂起程序通知debugger.

5.如果程序未處于被調試狀态或者debugger沒有能夠處理,并且你調用

SetUnhandledExceptionFilter安裝了最後異常處理例程的話,系統轉向對它的調用。

6.如果你沒有安裝最後異常處理例程或者他沒有處理這個異常,系統會調用默認的系統處理程序,通常顯示一個對話框,你可以選擇關閉或者最後将其附加到調試器上的調試按鈕.如果沒有調試器能被附加于其上或者調試器也處理不了,系統就調用ExitProcess終結程序。

7.不過在終結之前,系統仍然對發生異常的線程異常處理句柄來一次展開,這是線程異常處理例程最後清理的機會。

上一篇:武術操

下一篇:四川電信

相關詞條

相關搜索

其它詞條