2012-08-09 75 views
7

我最近閱讀了關於Windows異常處理的以下內容。什麼是「雙堆棧故障」?

在某些未處理的異常(例如雙棧錯誤)中,操作系統將立即終止應用程序而不調用未處理的異常過濾器或JIT調試器。

什麼是雙堆棧故障?它與常規堆棧錯誤有何不同?

回答

7

這個短語可能來自這個Codeproject article。該網站對技術審查並不熟知。 「雙重故障」的真正含義與操作系統內核有關,當內核的故障處理程序對用戶模式故障作出響應時會遇到故障,您會遇到雙重故障。這是致命的並引發內核恐慌。 Windows上的藍色屏幕。此外,處理器中還存在一些問題,x86核心在遭受「三重故障」時停止執行代碼。

沒什麼壞在這裏,他意味着在他的文章中描述的一個條件下的程序炸彈由於堆棧溢出,並在應對碰撞運行的代碼,如用UnhandledExceptionFilter的註冊()消耗Windows提供的線程嘗試從SO恢復的堆棧的最後一部分。這並不多,8192字節(兩頁),可用的小於7080字節。如果這樣的代碼消耗了這個儲備,那麼節目結束,不能進行進一步的功能調用。內核引發訪問衝突並無條件終止進程。

這個小的保留也是託管代碼不能存活的原因,CLR需要太多的棧空間來反映異常,所以立即終止程序而不嘗試。關於後衛頁面的通用背景文章,其基本機制is here