彙編 設定中斷描述符表

2021-06-15 21:58:28 字數 967 閱讀 5608

操作的步驟如下:

1、記錄中斷處理函式的段內偏移

2、獲取或指定段選擇子

3、對idt表賦值(本操作是對所有的中斷都採用同一的函式(myintfunc)處理)

注: _idt  中斷描述符表的基址

idt_descr  中斷描述符操作的引數

圖示如下:63.55.47.39.31.23.15.7.0

|myintfunc[2] |myintfunc[3] |0x8e |0x00 |0x00 |0x08 |myintfunc[1] |myintfunc[0] |

setup_idt:  

lea  myintfunc,%edx # 將 ignore_int的有效位址(偏移值)值 edx暫存器  

movl $0x00080000,%eax  # 將指定段選擇子 0x0008置入  eax 的高 16位中。  

movw %dx,%ax  /* 偏移低兩字放入ax 對應中斷描述符的低兩位元組(0,1) */ 

movw $0x8e00,%dx /* 狀態字  interrupt gate - dpl=0, present */     

lea _idt,%edi # _idt是中斷描述符表的位址。  

mov $256,%ecx  

rp_sidt:  

movl %eax,(%edi)# 將啞中斷門描述符存入表中。  

movl %edx,4(%edi)  

addl $8,%edi# edi指向表中下一項。  

dec %ecx  

jne rp_sidt  

lidt idt_descr # 載入中斷描述符表暫存器值。  

ret

idt_descr: #下面兩行是lidt 指令的6 位元組運算元:長度,基址。

.word 256*8-1 # idt contains 256 entries

long _idt  

中斷描述符表

中斷描述表是乙個系統表,它與每乙個中斷或異常向量相聯絡,每乙個向量在表中有相應的中斷或異常處理程式的入口位址。核心在允許中斷發生前,必須適當地初始化idt。在第二章中,我們介紹了gdt和ldt,idt的格式與這兩種表的格式非常相似,表中的每一項對應乙個中斷或異常微量,每個向量由8個位元組組成。因此,...

驅動程式設計 idt hook 中斷描述符表

整理下之前過驅動保護的學習,idt hook也是乙個經常用到的hook思路。還是要用到inline hook進入到中斷函式位址進行jmp 獲取idt表位址 修改int3中斷函式 include include ifdef cplusplus extern c endif pragma pack pu...

全域性描述符表

局描述符表 gdt global descriptor table 在protected mode下,乙個重要的必不可少的資料結構就是gdt global descriptor table 中文名全域性描述符表 外文名global descriptor table 類 型 資料結構 領 域 科學技術...