12 中斷門與陷阱門

2021-09-09 09:26:41 字數 1874 閱讀 7971

當我們寫win32程式的時候,呼叫windows提供的api,程式執行要一步一步從三環到0環,這乙個過程就要用到中斷門,新的cpu用快速呼叫。

1.idt

idt即中斷描述符表,與gdt一樣,idt也是由一系列描述符組成,每個描述符佔8個位元組,但是idt第乙個描述符不是null.

在windbg中檢視idt的基址和大小指令如下:

r idtr

r idtl

2.idt表構成

idt表包括三種門描述符

任務門描述符

中斷門描述符

陷阱門描述符

3.中斷門描述符結構

該結構可以在架構手冊的2431頁找到

當描述符的s位也就是高四位元組的第12位為0時,且type域為1110時,這個描述符就是中斷門描述符。其結構跟呼叫門類似,但是中斷門不允許傳引數。

接下來我們用中斷門做乙個讀取高2g位址值的實驗。

首先我們先來構造乙個中段描述符p位一定要構造成1表示有效的描述符,由於我們的測試**時在三環的,所以dpl應該弄成11

0000ee00 00080000

然後我們用下面**來做測試:

#include #include dword dwh2**alue;

void _declspec(naked)geth2**alue()

}void printh2**alue()

int main()

printh2**alue();

getchar();

return 0;

}

同樣先記錄geth2**alue的位址,然後補全中斷門描述符為:

0040ee00 00081030

然後我們執行r idtr檢視一下中斷描述符表基址,如下圖:

然後用dq 8003f400檢視一下中段描述符表的資訊,如下圖:

用eq 8003f500 0040ee00`00081030將描述符寫入idt中,並用g命令繼續執行虛擬機器

且換到虛擬機器中執行我們的**,結果如下:

這裡我們就成功讀出了資料。

4.陷阱門描述符結構

從上圖可以看出其結構和中斷門幾乎是一樣的,只是type域不一樣

同樣我們跟中斷門採取一樣的步驟做測試,構造的陷阱門描述符為:

0040ef00 00081030

寫入idt表:

執行結果如下:

可以看到同樣讀出資料。

5.陷阱門與中斷門的區別

中斷門執行時,將if位置0,陷阱門不會。

if位(標誌位暫存器中下標為9的位)為0代表其不接受可遮蔽中斷(可遮蔽中斷自行查閱資料)

中斷門與陷阱門

windows核心分析索引目錄 中斷門與陷阱門 問題索引 1.中斷的初步認識 2.檢視idt表 3.中斷門描述符 4.中斷門的執行流程 5.構造中斷門函式並通過iref返回 6.陷阱門描述符 7.修改if標誌位 只有在零環才能使用 8.中斷門與陷阱門的區別 9.中斷與異常的區別 10.陷阱門實驗 問...

中斷描述符(IDT) 任務門 中斷門 陷阱門

中斷描述符idt表示乙個系統表,它與中斷或異常向量相聯絡。每乙個中斷或異常向量在這個系統表中有對應的中斷或異常處理程式入口位址。中斷描述符的每一項對應乙個中斷或異常向量,每個向量由8個位元組組成。因此,最多需要256 8 2048位元組來存放idt。在執行中斷之前,必須初始化idt 中斷描述符表 i...

Windows核心 (10)中斷門

idt既中斷門描述符表,同gdt一樣,idt也是由一系列描述符組成的,每個描述符佔8個位元組。但要注意的是,idt表中的第乙個元素不是null。idt表可以包含3種門描述符 任務門描述符 中斷門描述符 陷阱門描述符 1 windows沒有使用呼叫門,但是使用了中斷門 2 執行呼叫門的指令 call ...