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. 简述编写Django应用的基本步骤

    (1)创建项目,cd到一个你想要放置你代码的目录.Django -admin startproject mysite. Django project即一个Django项目实例需要的设置项的集合,包括数 ...

  2. english note(6.10to6.16)

    6.10 http://www.51voa.com/VOA_Special_English/blackbeard-s-ship-comes-to-the-us-supreme-court-82217_ ...

  3. 深入剖析 Spring WebFlux

    一.WebFlux 简介 WebFlux 是 Spring Framework5.0 中引入的一种新的反应式Web框架.通过Reactor项目实现Reactive Streams规范,完全异步和非阻塞 ...

  4. Vuls 漏洞扫描工具部署及效果展示

    Vuls 漏洞扫描工具部署及效果展示 介绍 Vuls根据NVD,OVAL等数据对主流Linux系统进行扫描,并具有完善的报告. 支持系统 Distribution Release Alpine 3.3 ...

  5. Go语言核心36讲(Go语言基础知识六)--学习笔记

    06 | 程序实体的那些事儿 (下) 在上一篇文章,我们一直都在围绕着可重名变量,也就是不同代码块中的重名变量,进行了讨论.还记得吗? 最后我强调,如果可重名变量的类型不同,那么就需要引起我们的特别关 ...

  6. hadoop学习笔记:运行wordcount对文件字符串进行统计案例

    文/朱季谦 我最近使用四台Centos虚拟机搭建了一套分布式hadoop环境,简单模拟了线上上的hadoop真实分布式集群,主要用于业余学习大数据相关体系. 其中,一台服务器作为NameNode,一台 ...

  7. 23.合并k个有序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

  8. vue3.x新特性之setup函数,看完就会用了

    最近有小伙伴跟我聊起setup函数,因为习惯了vue2.x的写法导致了,setup用起来觉得奇奇怪怪的,在一些api混编的情况下,代码变得更加混乱了,个人觉得在工程化思想比较强的团队中使用setup确 ...

  9. LeetCode:数组专题

    数组专题 有关数组的一些 leetcode 题,在此做一些记录,不然没几天就忘光光了 二分查找 双指针 滑动窗口 前缀和/差分数组 二分查找 本文内容摘录自公众号labuladong中有关二分查找的文 ...

  10. Java:并发笔记-04

    Java:并发笔记-04 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 本章内容-3 线程状态转换 活跃性 Lock 3.10 重新理解线程状态转换 假设有线 ...