陷阱门

前言:陷阱门的笔记

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

陷阱门描述符

陷阱门与中断门的区别

几乎一样,但是有两个点是不一样的

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

posted @ 2022-02-06 23:51  zpchcbd  阅读(215)  评论(0)    收藏  举报