Windows内核中的CPU架构-7-陷阱门(32-Bit Trap Gate)

陷阱门和中断门几乎是一模一样的:

(注:图里高32位中的第11位的值为D,其实是1)

除了高32位中的type字段的内容不一样:

陷阱门的值为15,中断门的值为14。

陷阱门和中断门的区别:

陷阱门和中断门只有一个唯一的区别,其它的包括调用方式都是一模一样。

唯一区别:通过中断门进入中断服务程序时CPU会字段将中断关闭,也就是把CPU中EFLAG寄存器中的IF标志位复位,来防止嵌套中断的发生。而通过陷阱门进入中断服务程序时则维持IF标志位不变,这就是唯一区别。

其中有几个概念需要特殊说明,IF标志位,和中断的扩展内容。

中断

中断可分为,可屏蔽中断和不可屏蔽中断。

比如说:鼠标,键盘操作就是可屏蔽中断。

IF标志位:

EFLAG寄存器:

IF标志位对应的内容是中断使能标志,Interrupt flag。

当某一个中断请求发生时,中断控制器通过判断IF标志位的值来确定是否给CPU发生中断信号。

当IF为1时,可以响应可屏蔽中断请求,当IF为0时,就会禁止响应可屏蔽中断请求。

简单来说,就是Eflag寄存器中的IF标志位,来决定是否可以响应可屏蔽中断请求。

使用陷阱门:

这个和中断门一模一样,除了段描述符得改一改,我直接用之前的程序来配置了。

配置段描述符:

这里我就省略过程了。

段描述符值为:0040EF0000081080

保存在idt表内:

调用中断:

和中断门一模一样:

#include<iostream>
#include<Windows.h>
using namespace std;

void _declspec(naked) test()
{
_asm
{
push eax
mov eax,0x80b93040
mov eax,[eax]
pop eax
iretd
}
}

int main()
{
printf("%x\n", test);
_asm
{
int 0x20
}
system("pause");
return 0;
}

  

测试结果:

正常运行。

小结

陷阱门(trap gate)和中断门几乎一致,只是有能否屏蔽可屏蔽中断这个概念而已。

Windows内核中的CPU架构-7-陷阱门(32-Bit Trap Gate)的更多相关文章

  1. Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate)

    Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate) 中断门和调用门类似,也是一种系统段.同样的它也可以用来提权. 中断门: 虽然中断门的段描述符如下: 但是中断 ...

  2. Windows内核中的CPU架构-8-任务段TSS(task state segment)

    Windows内核中的CPU架构-8-任务段TSS(task state segment) 任务段tss(task state segment)是针对于CPU的一个概念. 举一个简单的例子,你一个电脑 ...

  3. 02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示

    02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示 2017/8/18 13:53 版本:V1.0 开发板:SC5806(全志R58平台) SDK:android4.4.4 ...

  4. Windows内核中的内存管理

    内存管理的要点 内核内存是在虚拟地址空间的高2GB位置,且由所有进程所共享,进程进行切换时改变的只是进程的用户分区的内存 驱动程序就像一个特殊的DLL,这个DLL被加载到内核的地址空间中,Driver ...

  5. 【windwos 操作系统】关键的Windows内核数据结构一览(上)

    文章作者:r00tk1t 发布时间:2018年01月08日 - 21时56分 最后更新:2020年10月20日 - 21时01分 原始链接:https://r00tk1ts.github.io/201 ...

  6. Windows内核 基本汇编指令

    1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...

  7. Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)

    纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Wi ...

  8. windows内核代码之进程操作

    [toc] 一丶简介 整理一下windows内核中.常用的代码.这里只整理下进程的相关代码. 二丶 windows内核之遍历进程 内核中记录进程的结构体是EPROCESS结构.所以只需要遍历这个结构即 ...

  9. Windows内核开发-6-内核机制 Kernel Mechanisms

    Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Reques ...

随机推荐

  1. Java安全之 ClassLoader类加载器

    Java安全之 ClassLoader类加载器 0x00 前言 前面这里抛出一个问题,Java到底是什么类型的编程语言?是编译型?还是解释型?在这个问题是其实一直都都有疑惑,如果说是解释型语言的话,那 ...

  2. 【Vue】淘气三千问之 data为什么是函数而不是对象?这河狸吗

    朋友,当你提出以上问题的时候建议你先去复习下原型链的知识 但是我好人做到底直接就讲了吧,我们先看一下下面的这段代码: function Component () { this.data = this. ...

  3. docker network 参数

    一. 格式 docker network COMMAND 二.COMMAND 讲解 2.1 .docker network connect 格式 docker network connect [OPT ...

  4. P1758-[NOI2009]管道取珠【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P1758 题目大意 给出一个大小为\(n\)和一个大小为\(m\)的栈,每次选择一个栈弹出栈顶然后记录这个字母,求所 ...

  5. P3244-[HNOI2015]落忆枫音【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3244 题目大意 给出一个\(\text{DAG}\),保证\(1\)可以到达所有点.然后再加入一条边(之后不一定 ...

  6. 深入浅出WPF-06.Binding(绑定)01

    Binding(绑定) 先上图,再解释 针对这个图,我们先来说说什么是Binding. Binding就是一个桥梁,建立在数据和UI之间的桥梁.既然是数据驱动,那么我们就把数据称之为"源&q ...

  7. 浏览器输入URL之后,HTTP请求返回的完整过程

    1.输入url,按下回车时,先做一个redirect(重定向),因为浏览器可能记录本机的地址已经永久跳转成新的地址,所以一开始浏览器就先要判断下需不需要重定向,以及重定向到哪里:2.然后第二步就是看A ...

  8. Windows 11正式版来了,下载、安装教程、一起奉上!

    Windows 11正式版已经发布了,今天给大家更新一波Win11系统的安装方法,其实和Win10基本一样,有多种方法.   安装Win11前请先查看电脑是否支持Win11系统,先用微软自家的PC H ...

  9. iOS实现XMPP通讯(二)XMPP编程

    项目概述 这是一个可以登录jabber账号,获取好友列表,并且能与好友进行聊天的项目. 使用的是第三方库XMPPFramework框架来实现XMPP通讯. 项目地址:XMPP-Project 项目准备 ...

  10. C++核心编程 4 类和对象-封装

    C++面向对象的三大特性:封装.继承.多态 C++认为万事万物皆为对象,对象上有其属性和行为 封装 意义:1.将属性和行为作为一个整体,表现生活中的事物 语法: class 类名{   访问权限:属性 ...