第八章——Windows下異常處理-異常處理基本概念
阿新 • • 發佈:2019-01-04
前言:
中斷和異常的區別,中斷是由外部硬體裝置或非同步事件產生的。異常是由內部事件產生,可以分為故障,陷阱和終止三類。
由CPU引發的異常成為硬體異常,例如訪問一個無效的記憶體地址。由作業系統或應用程式引發的異常成為軟體異常。
我們也可以主動丟擲一個異常,通過RaiseException()函式
void WINAPI RaiseException(
_In_ DWORD dwExceptionCode, //標識所引發異常的程式碼
_In_ DWORD dwExceptionFlags, //異常是否繼續執行的標識
_In_ DWORD nNumberOfArguments, //附加資訊
_In_ const ULONG_PTR *lpArguments //附加資訊
);
異常處理基本過程
1.IDT
在windows啟動後,在保護模式下,有中斷或者異常發生時,CPU會通過中斷描述符表來查詢處理函式(IDT表)
IDT表共有256項,在32位下每個IDT項的長度為8位元組,在64位下長度為64位元組,作業系統會在啟動階段初始化這個表
IDT的位置和長度由CPU和IDTR暫存器藐視,IDTR暫存器有48位,其中高32位是基地址。低16位是表的長度
IDT的每一項都是一個門結構,其中有三種門:
- 任務門:用於CPU任務切換(TSS)
- 中斷門:用於描述中斷處理程式入口
- 陷阱門:主要用於描述異常處理程式入口