陷阱门
前言:陷阱门的笔记
陷阱门和中断门几乎差不多一样的,所以这里也不过多介绍了,自己手动构建中断门作为学习即可
陷阱门描述符

陷阱门与中断门的区别
几乎一样,但是有两个点是不一样的
1、段描述符中的TYPE位不一样
2、中断门执行时,将IF位清零,但陷阱门不会。
如果IF位为0的话,则不再接收可屏蔽中断,什么是可屏蔽中断?就比如组合键可以让屏幕锁定,操作系统就会锁定屏幕,这种的话就是中断请求,这种中断就是可屏蔽中断,也就是IF为1
练习构造一个陷阱门
陷阱门的触发同样还是通过INT指令来进行触发,所以这里构建的指令为eq 8003f500 0040EF00 00081020

测试代码如下所示:
#include<stdio.h>
#include<windows.h>
DWORD dwHigh2G; // test data
void __declspec(naked) test(){
__asm{
pushad;
pushfd;
mov eax,0x8003f008;
mov ebx,[eax];
mov dwHigh2G,ebx;
popfd;
popad;
iretd;
}
}
int main(){
__asm{
int 0x20;
}
printf("%x", dwHigh2G);
return 0;
}
可以正常读取,如下图所示

通过中断门与陷阱门打印EFLAG寄存器的值
X

浙公网安备 33010602011771号