首页
社区
课程
招聘
[原创]12.滴水中级班(内核驱动)——中断门
发表于: 3小时前 81

[原创]12.滴水中级班(内核驱动)——中断门

3小时前
81

Windows虽然没有使用调用门,但是使用了中断门,这里举两个例子:1.系统调用。当我们在写应用层程序的时候,肯定用过Windows提供的一些API,这些API在执行的过程中要通过3环一步一步进入到0环,这个过程就是系统调用。当系统调用的时候,从3环进入到0环这个过程就用到了中断门。老CPU用的是中断门,新的CPU基本都是快速调用了。2.调试。OllyDbg这种调试工具用F2下断点的时候,下断点的那个位置,实际上就是把下断点的那个地方的某一个字节的内容改为0xCC,0xCC这个硬编码对应的汇编指令就是INT 3,这个INT 3就是用来执行中断门的。

中断门和调用门的区别其实很小,调用门实际上就是在查表,查GDT表。中断门也是在查表,不过查的是IDT表,IDT表叫中断描述符表,IDT表和GDT表一样,也是由一系列描述符组成的,描述符有代码段数据段描述符,也有系统段描述符,而IDT里面存储到全部都是系统段描述符。再有就是IDT的第一个元素不是空,GDT里面第一个元素是空,IDT不是。

查看IDT表的指令有:

r idtr

可以查看IDT表的起始地址,如果想要查看有多大:

r idtl

可以查看IDT表有多大。

IDT表存储的都是描述符,IDT里面存储的都是门描述符

分别是任务门描述符、中断门描述符、陷阱门描述符。这节课主要是学习中断门描述符。

中断门描述符中的低四个字节的0~15和高四个字节中的16~31所拼出来的地址就是32位的地址,就是代码段的段内偏移地址,这个代码段就是低四个字节的16~31中写的是哪个代码段的选择子。

调用门0~4这个地方是ParamCount,可以传递参数,但中断门这里不允许传递参数所以这里是0;并且5~7也是0,所以0~7这个地方全都是0;P这个位置是1,DPL位置是11,中断门的类型也就是8~12这个位置,只有这个地方需要改,这个地方是1110,换句话说,这个地方是1110,那么这个地方是中断门。

这里做个实验演示一下。

这里的代码已经打印出来了,高2G的代码执行是没有问题的。这里海哥补充:如果之前调用门学的很好的话,这一块学习起来很快的。



[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!

收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回