要点回顾
Windows系统没有使用调用门,但是使用了中断门。
- 系统调用:当在开发应用层程序的时候,使用的API在执行过程中通过3环进入0环,这个过程就是系统调用。而从3环是如何进入0环的过程,就使用到了中断门。需要注意的是,老的CPU是通过中断门进入的0环,而现在的CPU都是通过快速调用。
- 调试:例如OD使用F2下断点,下断点其实就是把某个字节修改为了0xCC,0xCC硬编码对应的汇编指令就是INT3,INT3就是用来执行中断门的。
IDT
IDT即中断描述符表,其中存储的是系统段描述符。同GDT一样,IDT也是由一系列描述符组成的,每个描述符占8个字节。但需要注意的是,IDT表中的第一个元素不是NULL。
在Windbg中查看IDT表的基址和长度:
kd> r idtr
idtr = 8003f400
kd> r idtl
idtl = 000007ff
IDT表的构成
IDT表可以包含3种门描述符:
- 任务门描述符。
- 中断门描述符。
- 陷阱门描述符。
中断门描述符
- 高4字节第16-31位和低4字节第0-15位组合成一个代码段的段内偏移地址。
- 哪个代码段取决于低4字节第16-31位填写的是哪个代码段的段选择子。
- 高4字节0-7位不允许传递参数,所以都是0。
- P位一定是1。
- DPL是11。