2.内核异常处理流程
生活随笔
收集整理的這篇文章主要介紹了
2.内核异常处理流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用戶層異常與內核層異常
異??梢园l生在用戶空間,也可以發生在內核空間。
無論是CPU異常還是模擬異常,是用戶層異常還是內核異常,都要通過 KiDispatchException函數進行分發,這個函數比較復雜。
VOID KiDispatchException (IN PEXCEPTION_RECORD ExceptionRecord,IN PKEXCEPTION_FRAME ExceptionFrame,IN PKTRAP_FRAME TrapFrame,IN KPROCESSOR_MODE PreviousMode,IN BOOLEAN FirstChance //TRUE第一次處理該異常,FALSE不是第一次)沒有調試器或者內核調試器沒有處理,跳轉的地方都是一樣的都是這。
RtIDispatchException執行流程(沒有調試器或者內核調試器沒有處理)
kpcr.ExceptionList結構
typedef struct _EXCEPTION_REGISTRATION_RECORD { struct EXCEPTION_REGISTRATION_RECORD* Next; //下一個節點,如過為-1就是沒有下一個節點了PEXCEPTION_ROUTINE Handler; //指向下一個異常處理函數 } EXCEPTION_REGISTRATION_RECORD;如果RtIDispatchException返回是1,異常就處理掉了。
將原來的 CONTEXT 放回 Trap_Frame 結構中,異常已經處理掉了不需要返回3環。
如果RtIDispatchException返回是0,異常沒有被處理
總結
以上是生活随笔為你收集整理的2.内核异常处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。