1. 程式人生 > >2018/11/06-異常-《惡意程式碼分析實戰》

2018/11/06-異常-《惡意程式碼分析實戰》

  異常機制允許一個程式在普通執行流之外處理事件。多數時間裡,異常是由錯誤引起的,諸如除零錯誤。當一個異常發生時,執行轉移到處理這個異常的特殊例程。有些異常,比如除零異常,是由硬體丟擲的;其他的,比如無效記憶體訪問,是由作業系統丟擲的。你也可以在程式碼中使用RaiseException呼叫,顯示地丟擲一個異常。

  結構化異常處理(SEH)是Windows的異常處理機制。在一個32位系統中,SEH資訊被儲存在棧上。

  當一個異常發生時,Windows檢視fs:0來尋找儲存異常資訊的棧位置,然後這個異常處理器被呼叫。在這個異常被處理後,執行返回到主執行緒。

  異常處理時可巢狀的,並且不是所有的處理器都會對應著所有異常。如果當前幀的異常處理器不處理這個異常,這個異常會被傳遞給呼叫者幀的異常處理器。最終,如果這些異常處理器中沒有一個響應這個異常,那麼頂層的異常處理器將是應用程式崩潰。

  異常處理器可以讓惡意程式碼獲得執行機會。一個指向異常處理資訊的指標被儲存在棧上,在棧溢位時,一個攻擊者可以覆蓋這個指標。通過指定一個新的異常處理器,攻擊者可以在一個異常發生時獲得執行機會。異常會在除錯與反除錯章節中(第8~10、15和16章)深度介紹。