12-陷阱门

1. 陷阱门的结构

|   7    |     6  |     5     |   4    |   3    |   2    |   1    |   0    |  字节
|76543210|76543210|7 65 4 3210|76543210|76543210|76543210|76543210|76543210|  比特
|-----------------|1|--|0|1111|--------|--------|--------|--------|--------|  占位
|offset in segment|P|D |S|TYPE|        |segment selector |offset in segment|  含义
|     31-16         |P |               |                 |       15-0      |
                    |L |

通常陷阱门是以 ----ef00 0008----这种形式出现的,当然了,第 5 个十六进制数不一定就是 e,如果 DPL = 0 的话,那这个数就是 8. 后面的 0008 是段选择子,而左右两侧的占位符是要跳转的地址。

不细心的同学还以为我上面这段都是从中断门那里抄过来的。没错,确实是抄来的,99%相同,有2个位置我改了,一个是 TYPE 那里,在中断门中 TYPE 是 1110 ,现在改成了 1111. 后面的 ee 也改成了 ef.

其它的和中断门完全相同。那么在后面的实验里,除了在安装描述符上和中断门那不一样,测试代码甚至都不用改。

2. 实验

说了这么多,到底哪不一样?这里仍然使用中断门的实验代码。但是设计的描述符稍微不一样了一点。

  • 陷阱门描述符设计
0040ef00`00081020

和前面唯一的区别就是第6位的e变成了f(之前设计的中断门描述符是 0040ee00`00081020)

  • 安装描述符
eq 8003f500 0040ef00`00081020
  • 执行结果

这里写图片描述

3. 陷阱门对 EFLAGS 的影响

从实验结果上可以看到与上节不同的是,这里的EFLAGS并未受到影响。不同于上节,进入中断门,CPU会把EFLAGS中的IF位置1,而进入陷阱门,CPU并不修改 IF 位。

4. 陷阱门对堆栈的影响

同中断门一样,当代码从 3 环进入 0环时,CPU同样做两件事。

  • 切换到 0 环栈(也就是修改 ss 段寄存器和 esp 寄存器)
  • 在0环栈中压入 ss3, esp3, eflags, cs3, eip3

在提权的时候,一直遗留了一个小小细节,0 环栈的段描述符 ss0 和 栈顶指针 esp0,从哪里来?如果你想到了这个问题,是否冒出了黑人问号 ????

本节并不打算讲 TSS(Task State Segment,任务状态段),但是为了引出这个话题,先抛出名词。然后告诉你,CPU在切换栈的时候,SS和ESP来源于 TSS。

TSS 位于内存中的某个位置,结构固定。其中两个字段,就保存了 SS0 和 ESP0.

5. 代码

本节代码和上节中断门完全相同,请移步至中断门查看代码。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本书是在第3版《MCS:51单片机应用设计》一书的基础上,从应用的角度,详细地介绍了MCS:51单片机的硬件结构、指令系统、各种硬件接口设计、各种常用的数据运算和处理程序、接口驱动程序以及MCS:51单片机应用系统的设计,并对MCS:51单片机应用系统设计中的抗干扰技术以及各种新器件也作了详细的介绍。本书突出了选取内容的实用性、典型性。书中的应用实例,大多来自科研工作及教学实践,且经过检验。内容丰富、详实。本书可作为工科院校的本科生、研究生、专科生单片机课程的教材以及毕业设计的参考资料,也可供从事自动控制、智能、仪器、仪表、电力、电子、机电一体化以及各类MCS:51单片机应用的工程技术人员参考。 第1章 单片机概述 1.1 什么是单片机 1.2 单片机的历史及发展概况 1.3 8位单片机的主要生产厂家和机型 1.4 单片机的发展趋势 1.5 单片机的应用 1.6 MCS-51系列单片机 思考题及习题 第2章 MCS—51单片机的硬件结构 2.1 MCS-51单片机的硬件结构 2.2 MCS-51的引脚 2.2.1 电源及时钟引脚 2.2.2 控制引脚 2.2.3 I/O 引脚 2.3 MCS-51的微处理器 2.3.1 运算器 2.3.2 控制器 2.4 MCS-51存储器的结构 2.4.1 程序存储器 2.4.2 内部数据存储器 2.4.3 特殊功能寄存器(SFI{) 2.4.4 位地址空间 2.4.5 外部数据存储器 2.5 并行L/O端口 2.5.1 P0口 2.5.2 P1 口 2.5.3 p2口 2.5.4 P3口 2.5.5 PO-P3口电路小结 2.6 时钟电路与时序 2.6.1 时钟电路 2.6.2 机器周期和指令周期 2.6.3 MCS-51的指令时序 2.7 MCS-51的复位和复位电路 2.7.1 复位操作 2.7.2 复位电路 思考题及习题 第3章 MCS—51单片机指令系统 3.1 指令系统概述 3.2 指令格式 3.3 指令系统的寻址方式 3.4 MCS-51单片机指令系统分类介绍 3.4.1 数据传送类指令 3.4.2 算术操作类指令 3.4.3 逻辑运算指令 3.4.4 控制转移类指令 3.4.5 位操作指令 3.5 MCS-51汇编语言的伪指令 思考题及习题 第4章 MCS—51的中断系统 4.1 中断的概念 4.2 MCS-51中断系统的结构 4.3 中断请求源 4.4 扣断控制 4.4.1 中断允许寄存器m 4.4.2 中断优先级寄存器IP 4.5 中断响应 4.6 外部中断的响应时间 4.7 外部中断的触发方式选择 4.7.1 电平触发方式 4.7.2跳沿触发方式 4.8 中断·清求的撤消 4.9 中断服务程序的设计 4.10 多外部中断源系统设计 4.10.1 定时器/计数器作为外部中断源的使用方法 4.10.2 中断和查询结合的方法 4.10.3 用优先权编码器扩展外部中断源 思考题及习题 第5章 MCS—51的定时器/计数器 5.1 定时器/计数器的结构 5.1.1 工作方式寄存器TMOD 5.1.2 定时器/计数器控制寄存器TCON 5.2 定时器/计数器的4种工作方式 5.2.1 方式0 5.2.2 方式1 5.2.3 方式2 5.2.4 方式3 5.3 定时器卅数器对外部计数输入信号的要求 5.4 定时器卅数器编程和应用 5.4.1 方式0应用 5.4.2 方式1应用 5.4.3 方式2的应用 5.4.4 方式3的应用 5.4.5 控制位CATE的应用—测量脉冲宽度 5.4.6 实时时钟的设计 5.4.7 运行中读定时器/计数器 思考题及习题 第6章 MCS—51的串行口 6.1 串行口的结构 6.1.1 串行口控制寄存器SCON 6.1.2 特殊功能寄存器PCON 6.2 串行口的4种工作方式 6.2.1 方式0 6.2.2 方式1 6.2.3 方式2 6.2.4 方式3 6.3 多机通讯 6.4 波特率的设定 6.4.1 波特率的定义 6.4.2 定时器T1产生波特率的计算 6.5 串行口的编程和应用 6.5.1 串行口方式1应用编程(双机通讯) 6.5.2 串行口方式2应用编程 6.5.3 串行口方式3应用编程(双机通讯) 思考题及习题 第7章 MCS—51扩展存储器的设计 7.1 概述 7.2 系统总线及总线构造 7.2.1 系统总线 7.2.2 构造系统总线 7.2.3 单片机系统的串行扩展技术 7.3 读写控制、地址空间分配和外部地址锁存器 7.3.1 存储器扩展的读写控制 7.3.2 存储器地址空间分配 7.3.3 外部地址锁存器 7.4 程序存储器EPROM的扩展 7.4.1 EPROM芯片介绍 7.4.2 程序存储器的操作时序 7.4.3 典型的EPROM接口电路 7.5 静态数据存储器的扩展 7.5.1 常用的静态RAM(SRAM)芯片 7.5.2 外扩数据存储器的读写操作时序 7.5.3 典型的外扩数据存储器的接口电路 7.6 EPROM和RAM的综合扩展 7.6.1 综合扩展的硬件接口电路设计 7.6.2 外扩存储器电路的工作原理及软件设计 7.7 E2PROM的扩展 7.7.1 常用的E2PROM芯片 7.7.2 E2PROM的工作方式 7.7.3 MCS—51扩展Z2PROM的方法 7.8 ATMEL89C51/89C55单片机的片内闪烁存储器 7.8.1 89C51的性能及片内闪烁存储器 7.8.2 片内闪烁存储器的编程 7.9 其他的特殊存储器简介 思考题及习题 第8章 MCS—51的UO接口扩展 8.1 I/O扩展概述 8.1.1 I/O接口的功能 8.1.2 I/O端口的编址 8.1.3 I/O数据的几种传送方式 8.1.4 常用的I/O接口电路芯片 8.2 MCS—51扩展可编程并行I/O芯片8255A 8.2.1 8255A芯片介绍 8.3 MCS—51与可编程RAM/IO芯片8155H的接口 8.3.1 8155H芯片介绍 8.3.2 MCS—51与8155H的接口及软件编程 8.4 用74LSTIL电路扩展并行I/O口 8.4.1 用74LS377扩展8位并行输出口 8.4.2 用74LS373扩展8位并行输入口 8.4.3 用三态扩展8位并行输入口 8.4.4 采用74LSTrL的I/O接口扩展应用举例 8.5 用MCS—51的串行口扩展并行口 8.5.1 用741j165扩展并行输入口 8.5.2 用74LS164扩展并行输出口 思考题及习题 第9章 MCS—5重与键盘、显示器、拨盘、打印机的接口设计 9.I LED显示器接口原理 9.1.1 LED显示器结构 9.1.2 LED显示器工作原理 9.2 键盘接口原理 9.2.1 键盘输入应解决的问题 9.2.2 键盘接口的工作原理 9.2.3 键盘工作方式 9.2.4 双功能键的设计 9.3 键盘/显示器接口设计实例 9.3.1 利用8155H芯片实现键盘/显示器接口 9.3.2 利用8031的串行口实现键盘/显示器接口 9.3.3 利用专用键盘/显示器接口芯片8279实现键盘/显示器接口 9.4 MCS-51与液晶显示器(比D)的接口 9.4.1 1尤D显示的分类 9.4.2 点阵式液晶显示模块介绍 9.4.3 8031与I尤D模块(LCM)的接口及软件编程 9.5 MCS—51与微型打印机的接口 9.5.1 MCS—51与TPUP—40A/16A微型打印机的接口 9.5.2 MCS—51与CPl6微型打印机的接口 9.5.3 MCS—5l与XLF微型打印机的接口 9.6 MCS—51单片机与BCD码拨盘的接口设计 9.6.1 BCD码拨盘 9.6.2 BCD码拔盘与单片机的接口 9.7 MCS—51与功能开关的接口设计 思考题及习题 第10章 MCS—51与D/A、A/D的接口 10.1 MCS—51与DAC的接口 10.1.1 D/A转换器概述 10.1.2 MCS—51与8位DACO832的接口 10.1.3 MCS—51与12位DACl208系列的接口 10.1.4 MCS—51与nACl230系列的接口 10.2 MCS—51与ADC的接口 10.2.1 A/D转换器概述 10.2.2 MCS—51与ADC08凹(逐次逼近型)的接口 10.2.3 MCS-51与AD574(逐次逼近型)的接口 10.2.4 MCS—51与A/D转换器MCl4433(双积分型)的接口 10.2.5 MCS—51与ICL7135(双积分型)的接口 10.2,6 MCS—51与ICL7109(双积分型)的接口 10.3 MCS—51与V/F转换器的接口 10.3.1 用V/F转换器实现A/D转换的方法 10.3.2 常用V/F转换器LMX31简介 10.3.3 V/F转换器与MCS—51单片机接口 10.3.4 LM331应用举例 思考题及习题 第11章 MCS—5亚的功率接口 11.1 MCS—51输出驱动能力及其外围集成数字驱动电路 11.1.1 MCS—51片内I/O口的驱动能力 11.1.2 外围集成数字驱动电路 11.2 MCS—51的开关型功率接口 11.2.1 MCS—51与光电耦合器的接口 11.2.2 MCS—51与继电器的接口 11.2.3 MCS—51与晶闸管的接口 11.2.4 MCS—51与集成功率电子开关输出接口 11.2.5 MCS—51与固态继电器的接口 1.1.2.6 低压开关量信号输出技术 第12章 MCS—5重的串行通讯接口技术 12.1 各种标准串行通讯接口 12.1.1 RS—232C接口 12.1.2 lis—422A接口 12.1.3 RS—485接口 12.1.4 20mA电流环串行接口 12.1.5 各种串行接口性能比较 12.2 MCS—51单片机双机串行通讯技术 12.2.1 双机通讯接口设计 12.2.2 双机通讯软件设计 12.3 MCS—51的多机通讯技术 12.3.1 多机通讯原理 12.3.2 多机通讯接口设计 12.3.3 多机通讯软件设计 12.4 PC机与MCS-51单片机的双机串行通讯 12.4.1 PC机异步通讯适配器 12.4.2 RS-232C至RS-422/贴-485的转换方法 12.4.3 PC机与8031单片机双机通讯的接口设计 12.4.4 PC机与8031双机通讯的软件设计 12.5 PC机与多个M帕—51单片机间的串行通讯 12.5.1 多机通讯原理 12.5.2 多机通讯接口设计 12.5.3 多机通讯软件设计 12.6 串行通讯中的波特率设置技术 12.6.1 PC机中波特率的产生 12.6.2 MCS—51单片机串行通讯波特率的确定 12.6.3 波特率相对误差范围的确定方法 12.6.4 SMOD位对波特率的影响 第13章 MCS—51的其他扩展接口及实用电路 13.1 MCS—51单片机与日历时钟芯片的接口设计 13.1.1 DSl2887日历时钟芯片的性能及引脚说明 13.1.2 使用说明 13.1.3 M帕—51与DSl2887的接口设计 13.2 MCS—51单片机报警接口 13.2.1 鸣音报警接口 13.2.2 语音报警接口 13.3 MCS—51与可编程定时器/计数器芯片8253的接口 13.3.1 8253的内部结构、引脚及端口编址 13.3.2 8253工作方式和控制字定义 1.3.3,3 8253的工作方式与操作时序 13.3.4 MCS—51与8253的接口和编程实例 13.4 MCS—51与微处理器监控器MAX690A/MAX692A的接口 13.4:1 MAX690A/MAX692A简介 13.4.2 工作原理 13.4.3 MCS—51单片机与MAX690A/MAX692A的接口 13.5 高精度电压基准 13.5.1 精密电压基准MCl403(5G1403) 13.5.2 单片集成精密电压芯片AD584 13.1.3 其他电压基准 第14章 MCS—51程序设计及实用子程序 14.1 查表程序设计 14.2 数据极值查找和数据排序 14.2.1 数据极值查找 14.2.2 数据排序 14.3 散转程序设计 1.4.3.1 使用转移指令的散转程序 14.3.2 使用地址偏移量表的散转程序 14.3.3 使用转向地址表的散转程序 14.3.4 利用RET指令实现的散转程序 14.4 循环程序设计 14.4.1 单循环定时程序 14.4.2 多重循环定时程序 14.5 定点数运算程序设计 14.5.1 定点数的表示方法 14.5.2 定点数加减运算 14.5.3 定点数乘法运算 14.5.4 定点数除法 14.6 浮点数运算程序设计 14.6.1 浮点数的表示 14.6.2 浮点数的加减法运算 14.6.3 浮点数乘除法运算 14.6.4 定点数与浮点数的转换 14.7 码制转换 14.7.1 二进制码与ASCII码的转换 14.7.2 二进制码到BCD码的转换 14.7.3 BCD码到二进制码的转换 14.8 数字滤波 14.8.1 算术平均值法 14.8.2 滑动平均值法 14.8.3 防脉冲干扰平均值法 第15章 MCS—51应用系统设计、开发与调试 15.1 MCS—51应用系统设计 15.1.1 设计步骤 15.2 应用系统的硬件设计 15.3 MCS-51单片机系统举例 15.3.1 89C51最小应用系统 15.3.2 8031最小应用系统 15.3.3 典型应用系统 15.3.4 数据采集系统 15.4 应用系统的软件设计 15.5 单片机应用系统的开发和调试 15.5.1 仿真开发系统简介 15.5.2 用户样机开发调试过程 第16章 MCS—51应用系统的可靠性及抗干扰设计 16.1 干扰的来源 16.2 供电系统干扰及抗干扰措施 16.2.1 电源噪声来源、种类及危害 16.2.2 供电系统的抗干扰设计 16.3 过程通道干扰的抑制措施 16.3.1 隔离措施 16.3.2 长线传输干扰的抑制 16.4 空间干扰及抗干扰措施 16.4.1 接地技术 16.4.2 屏蔽技术 16.5 反电势干扰的抑制 16,6 印刷电路板的抗干扰设计 16.6.1 地线及电源线设计 16.6.2 去耦电容的配置 16.6.3 存储器的布线 16.6.4 印制板的布线原则 16.6.5 印制板上的器件布置 16.6.6 印制板的板间配线、连接和安装 16.7 软件抗干扰措施 16.7.1 软件抗干扰的前提条件 16.7.2 软件抗干扰的一般方法 16.7.3 软件滤波 16.7.4 开关量输入/输出软件抗干扰设计 16.7.5 指令冗余及软件陷阱 16.8 “看狗”技术和故障自动恢复处理 16.8.1 “看狗”技术 参考文献
### 回答1: x86的陷阱是通过在处理器提供的特殊访问硬件中断,在操作系统内核中实现进程上下文切换和系统调用等功能。它允许用户态程序请求操作系统内核的服务并获取系统资源,从而实现更高级别的应用程序,同时保护系统内核免受不受信任的用户程序的干扰。 ### 回答2: x86的陷阱是处理器中的一种特殊机制,用于进行操作系统和用户程序之间的通信,在特定情况下触发异常或中断。 陷阱的用途有以下几个方面: 1. 系统调用:操作系统通过陷阱来提供给用户程序一些特权指令,例如文件操作、网络通信等。用户程序可以通过触发陷阱来请求操作系统执行相应的特权指令,以实现系统功能。 2. 异常处理:当出现指令执行错误、访问非法内存或发生其他异常情况时,处理器可以通过陷阱来触发异常处理程序。操作系统可以通过定义陷阱中的异常处理例程,对异常进行捕获和处理,防止系统崩溃或保护用户程序的正常执行。 3. 中断处理:处理器可以通过陷阱来处理外部设备的中断请求。当外设发生中断时,处理器会跳转到陷阱中的中断处理例程,用于处理该中断事件并恢复正常执行。 4. 虚拟化技术:在虚拟化技术中,陷阱被用于虚拟机监控器(VMM)与虚拟机之间的通信。VMM通过陷阱截获虚拟机发出的请求,进行操作系统的虚拟化管理。 综上所述,x86的陷阱的主要用途是提供特权指令、处理异常、处理中断和支持虚拟化等功能,实现操作系统和用户程序之间的通信和控制。 ### 回答3: x86的陷阱是一种特殊的指令,用于在执行过程中引发软件异常或中断。它的主要用途包括以下几点: 1. 调试:陷阱允许程序员插入断点,以便在程序执行到指定位置时停止,并允许程序员对程序进行调试和观察。通过在指定位置设置陷阱,程序员可以捕获程序的执行变化,进行错误诊断和程序性能分析。 2. 异常处理:陷阱可以用于处理软件异常。当程序出现异常情况时,例如除零错误或无效指令等,陷阱可以触发一个异常处理例程,用于处理异常并采取相应的措施。这对于保证程序的安全性和稳定性非常重要。 3. 中断处理:陷阱可以用于处理中断请求。当外部设备发起一个中断请求时,陷阱可以引发中断处理例程,用于响应并处理中断请求。这使得处理外部设备的输入和输出变得更加灵活和有效。 总之,x86的陷阱是一种功能强大的机制,可以使程序员能够在程序执行过程中引发异常、中断,并进行相应的处理和调试。它对于提高程序的可靠性、稳定性和安全性起到了至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值