Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发
生活随笔
收集整理的這篇文章主要介紹了
Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Windows異常學習筆記(二)—— 內核異常處理流程&用戶異常分發
- 用戶層與內核層異常
- 內核異常
- 分析 KiDispatchException
- 分析 RtlDispatchException
- _EXCEPTION_REGISTRATION_RECORD
- 用戶異常的分發
- 用戶異常
- 分析 KiDispatchException
- 總結:用戶異常處理流程
用戶層與內核層異常
描述:
內核異常
分析 KiDispatchException
聲明:
VOID KiDispatchException(ExceptionRecord,ExceptionFrame,TrapFrame,PreviousMode,FirstChance);處理邏輯:
分析 RtlDispatchException
作用:
反匯編:
可以發現,RtlDispatchException 調用了 RtlpGetRegistrationHead,RtlpGetRegistrationHead的唯一作用就是獲取fs寄存器的值給eax
當程序位于0環是,FS寄存器指向KPCR,而KPCR的第一個成員又指向_EXCEPTION_REGISTRATION_RECORD這樣一個結構體
_EXCEPTION_REGISTRATION_RECORD
聲明:
typedef struct _EXCEPTION_REGISTRATION_RECORD {struct _EXCEPTION_REGISTRATION_RECORD *Next;PEXCEPTION_ROUTINE Handler; } EXCEPTION_REGISTRATION_RECORD;描述:
用戶異常的分發
描述:
異常如果發生在內核層,處理起來比較簡單,因為異常處理函數也在0環,不用切換堆棧,但是如果異常發生在3環,就意味著必須要切換堆棧,回到3環執行處理函數
切換堆棧的處理方式與用戶APC的執行過程幾乎是一樣的,惟一的區別就是執行用戶APC時返回3環后執行的函數是KiUserApcDispatcher,而異常處理時返回3環后執行的函數是KiUserExceptionDispatcher
理解用戶APC的執行過程是理解3環異常處理的關鍵
用戶異常
描述:當異常發生時,無論是CPU異常還是模擬異常,最終在0環都要通過一個函數進行分發處理,這個函數就是KiDispatchException
VOID KiDispatchException(ExceptionRecord,ExceptionFrame,TrapFrame,PreviousMode,FirstChance);注意:需先掌握用戶APC執行過程
分析 KiDispatchException
3. 從loc_42590B向下分析,是在為TRAP_FRAME結構體賦值,準備結束
總結:用戶異常處理流程
總結
以上是生活随笔為你收集整理的Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows异常学习笔记(一)—— C
- 下一篇: Windows异常学习笔记(四)—— 编