日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2.内核异常处理流程

發布時間:2025/3/20 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;

  • 遍歷異常鏈表,調用異常處理函數,如果異常被正確處理了,該函數返回1
  • 如果當前異常處理函數不能處理該異常,那么調用下一個,以此類推。
  • 如果到最后也沒有人處理這個異常,返回0。
  • 如果RtIDispatchException返回是1,異常就處理掉了。
    將原來的 CONTEXT 放回 Trap_Frame 結構中,異常已經處理掉了不需要返回3環。

    如果RtIDispatchException返回是0,異常沒有被處理

  • _KeContextFromKframes將Trap_Frame備份到context為返回3環做準備
  • 判斷先前模式0是內核調用 1是用戶層調
  • 是否是第一次調用
  • 是否有內核調試器
  • 如果沒有或者內核調試器不處理
  • 調用 RtIDispatchException
  • 如果返回TRUE這個分發結束了,異常解決了。
  • 如果返回FALSE,再次判斷是否有內核調試器 有就調用 沒有直接藍屏
  • 總結

    以上是生活随笔為你收集整理的2.内核异常处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。