陷阱门
陷阱门
陷阱门结构
结构上和中断门只有TYPE不同
S = 0 type = D111(D = 1 对应32位 D = 0 对应16位)

陷阱门执行流程
陷阱门执行流程一模一样。与中断门的区别,中断门执行时,将IF位清零,但陷阱门不会,也就是说明两者在堆栈上的不同就只有堆栈中的EFLAG
中断
什么是中断
中断是指在计算机执行实现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
中断的分类
内部中断(又叫软件中断)和外部中断(硬件中断);
外部中断又分为可屏蔽中断(INTR)和非屏蔽中断(NMI);
硬件中断中的非屏蔽中断只有一个就是突然掉电(停电)。
可屏蔽中断的过程:中断的请求、中断判优、中断的响应、中断服务、中断的返回。
可屏蔽中断(既可以响应,也可以不响应);
此处引用
【计算机组成原理】——可屏蔽中断与非屏蔽中断 https://blog.csdn.net/qq_43610614/article/details/106672063
EFLAGS寄存器(标志寄存器)
EFLAGS寄存器结构

实验
实现陷阱门
代码示例
#include "stdafx.h"
void __declspec(naked) test() //生成裸函数,不生成 ebp寻址 等代码
{
__asm
{
int 3;
IRETD;
}
}
int main(int argc, char* argv[])
{
__asm
{
INT 0x20;
}
printf("Hello World!\n");
return 0;
}
在IDT表中构建合适的陷阱门
0040EF00 00081020
在windbg中修改IDT表

执行代码,观察EFLAG

我们再去找一个中断门的寄存器

我们也验证了中断门执行时,将IF位清零,但陷阱门不会

浙公网安备 33010602011771号