SetUnhandledExceptionFilter

設定異常捕獲函式.

當異常沒有處理的時候,系統就會調用SetUnhandledExceptionFilter所設定異常處理函式.

例如一些程式在出錯的時候,會向用戶報告說程式那出錯就是利用這個.例如QQ..

異常處理中的一部分

當發生異常時,比如記憶體訪問違例時,CPU硬體會發現此問題,並產生一個異常(你可以把它理解為中斷)

然後CPU會把代碼流程切換到異常處理服務例程。作業系統異常處理服務例程會查看當前進程是否處於調試狀態

如果是,則通知調試器發生了異常,如果不是則作業系統會查看當前執行緒是否安裝了的異常幀鏈(FS[0]),如果安裝了SEH(try.... catch....),則調用SEH,並根據返回結果決定是否全局展開或局部展開。如果異常鏈中所有的SEH都沒有處理此異常,而且此進程還處於調試狀態,則作業系統會再次通知調試器發生異常(二次異常)。如果還沒人處理,則調用作業系統的默認異常處理代碼UnhandledExceptionHandler,不過作業系統允許你Hook這個函式,就是通過SetUnhandledExceptionFilter函式來設定。大部分異常通過此種方法都能捕獲,不過棧溢出、覆蓋的有可能捕獲不到。

大部分保護殼都採用異常處理技術,跳出正常的代碼指令流程,來迷惑Cracker。

LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter ( _In_LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter

) ;

參數:lpTopLevelExceptionFilter ,函式指針。當異常發生時,且程式不處於調試模式(在vs或者別的調試器里運行)則首先調用該函式。

返回值:返回以前設定的回調函式。

注意:在調用者進程中的所有執行緒已經將來創建的執行緒的異常處理鏈頂函式都會被修改為當前設定的回調函式。

相關詞條

熱門詞條

聯絡我們