SetUnhandledExceptionFilter函數學習

來源:互聯網
上載者:User

  首先看下百度上的對此函數的解釋。

設定異常捕獲函數.

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

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

  異常處理中的一部分

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

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

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

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

   說的有點粗略。

下面根據自己的理解闡述下。

   SetUnhandledExceptionFilter,根據函數的名字能看出是設定異常處理函數,其實如果程式沒設定異常處理函數,程式會調用預設的處理函數處理異常,然後程式終止,一般情況下就彈出個對話方塊。

如何設定自己的異常處理函數?

LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(
LPTOP_LEVEL_EXCEPTION_FILTER
lpTopLevelExceptionFilter

);

參數是一個函數指標,定義如下

LONG UnhandledExceptionFilter(
STRUCT _EXCEPTION_POINTERS
*ExceptionInfo

);

函數類型

ExceptionInfo 是對異常描述的一個結構體

typedef struct _EXCEPTION_POINTERS {
PEXCEPTION_RECORD ExceptionRecord;

PCONTEXT ContextRecord;

} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;

異常捕獲函數有三種傳回值

EXCEPTION_EXECUTE_HANDLER:表明異常處理完畢,程式可以退出

EXCEPTION_CONTINUE_EXECUTION:忽略此異常,從異常點繼續運行。如果此時再發生異常,還會調用異常處理函數

EXCEPTION_CONTINUE_SEARCH:異常沒被識別,交由上一級處理函數處理;

SetUnhandledExceptionFilter傳回值,如果為0,表明此時沒有附加額外的處理函數(除預設的處理函數),如果非空,則存放到當前頂層的處理函數地址。

需要注意的是,SetUnhandledExceptionFilter設定的異常處理函數為全域的處理函數,是異常發生後,最後一次處理異常的機會。如果程式被調試器附加。調試器將優先於SetUnhandledExceptionFilter設定的異常處理函數處理異常。C++自訂的try{}Catch{}比較。這是C++自訂的異常處理過程,利用SEH來處理髮生的異常,如果異常發生,又出現在try{}Catch{}中
將得到優先處理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.