陷阱门

陷阱门

陷阱门结构

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

陷阱门执行流程

陷阱门执行流程一模一样。与中断门的区别,中断门执行时,将IF位清零,但陷阱门不会,也就是说明两者在堆栈上的不同就只有堆栈中的EFLAG

中断

什么是中断

中断是指在计算机执行实现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。

中断的分类

内部中断(又叫软件中断)和外部中断(硬件中断);
外部中断又分为可屏蔽中断(INTR)和非屏蔽中断(NMI);
硬件中断中的非屏蔽中断只有一个就是突然掉电(停电)。
可屏蔽中断的过程:中断的请求、中断判优、中断的响应、中断服务、中断的返回。
可屏蔽中断(既可以响应,也可以不响应);

此处引用
【计算机组成原理】——可屏蔽中断与非屏蔽中断 https://blog.csdn.net/qq_43610614/article/details/106672063

EFLAGS寄存器(标志寄存器)

EFLAGS寄存器结构

1732325-20190822225537641-967614843

实验

实现陷阱门

代码示例

#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
PixPin_2026-07-29_19-56-59
执行代码,观察EFLAG
PixPin_2026-07-29_20-05-01
我们再去找一个中断门的寄存器
PixPin_2026-07-29_20-07-16
我们也验证了中断门执行时,将IF位清零,但陷阱门不会

posted @ 2026-07-29 20:10  书与兔子  阅读(5)  评论(0)    收藏  举报