`
1025250620
  • 浏览: 226444 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

调用门(转)

 
阅读更多
下面说明代码段和数据段的访问:


一、代码段间跳转


1、普通(直接)跳转:

JMP Selector:0 或 CALL Selector:0

1)一致代码段(JMP&CALL)

要求:CPL>=DPL,RPL不作检查

特权变化:跳转后程序CPL=跳转前程序CPL

2)非一致代码段(JMP&CALL)

要求:CPL=DPL & RPL<=DPL

特权变化:跳转后程序CPL=目标代码段DPL


2、通过调用门跳转:

JMP 调用门Selector:0 或 CALL 调用门Selector:0 (注意:此时如果选择子后面跟着32位偏移量也不会被CPU使用,因为调用门描述符已经记录了目标代码的偏移)


step1: 要求:指示调用门的选择子的RPL<=门描述符DPL & 当前代码段的CPL<=门描述符的DPL。


只有满足以上条件时,CPU才会进一步从调用门描述符中读取代码段的选择子或地址偏移。而从调用门中读取代码选择子和地址偏移后,跟普通跳转又站在同一起跑线上了。

唯一不同的是CPU会将目标代码段RPL清0。此后需要分类讨论,如下:


step2:

1)一致代码段(JMP&CALL)  <------------------------------------------------------------------------------------------------------

要求:CPL>=DPL,RPL不作检查(因为RPL总被清0)                                                        |

特权变化:跳转后程序CPL=跳转前程序CPL                                                                        |

                                                                                                                                             比较

2)非一致代码段(JMP)                                                                                                                |

要求:CPL=DPL,RPL不作检查(因为RPL总被清0)                                                          |

特权变化:跳转后程序CPL=目标代码段DPL                                                                        |

3)非一致代码段(CALL)  <------------------------------------------------------------------------------------------------------------

要求:CPL>=DPL,RPL不作检查(因为RPL总被清0)

特权变化:跳转后程序CPL=目标代码段DPL(CPL>DPL的情况下,特权级发生跃迁)


二、访问数据段

数据段:特权级低->高:NO | 特权级高->低:YES | 特权级同级之间:YES


注意:

1、一致代码段:无论那种方式跳转到一致代码段,CPL都不会改变(不变化为目标代码段的DPL),也即加载目标代码段选择子时,只加载高14位,表示CPL的低2位保持不变。

因此,“一致”的意思就是——代码段被调用执行时,不使用自己描述符的DPL,而采用调用这特权级,CS的低2位保持不变(与“调用者保持一致”)

2、非一致代码段:无论采用哪种方式跳转到非一致代码段,CPL都发生变化,也即在加载目标代码段选择子时,将整个选择子放入到CS中。

3、为了访问调用门,调用者程序的特权级CPL必须小于或等于调用门的DPL。调用门段选择符的RPL也要同调用CPL一样遵守相同的规则,即RPL也必须小于或等于调用门的DPL。如图:


[size=large][/size]
分享到:
评论

相关推荐

    Linux下系统调用原理解析及增加系统调用的方法.pdf

    用户态的程序只有通过门(gate)陷入(trap)到系统内核中去,才能执行一些具有特权的内核函数。 四、增加系统调用的方法 增加系统调用的方法可以通过在Linux内核中添加新的系统调用函数来实现。首先需要定义新的...

    Python代码一键转Jar包及Java调用Python新姿势

    随着人工智能的兴起,Python这门曾经小众的编程语言可谓是焕发了第二春。 以tensorflow、pytorch等为主的机器学习/深度学习的开发框架大行其道,助推了python这门曾经以爬虫见长(python粉别生气)的编程语言在...

    基于现场CAD矿图的矿井通风信息转换提取

    为解决由CAD矿图转成TF1M3D通风仿真可调用的数据问题,提出在原CAD矿图中从绘制矿井单线图时,标注系统构筑物和全部矿井通风信息.用线(Line)实体表达巷道,实体中赋予巷道标高和连通关系;用多义线(Polyline)表达风筒;用...

    数据结构课程设计(数制转换 学生成绩管理系统)

    主函数调用其它模块。根据以上 要求,建立一个3个学生的信 息登记表,每个学生的信息包括:学号、1门课程成绩。程序运行 时,提示输入学生数据, 建立初始链表。随后实 现删除学生记录、显示结果、插入学生记录、...

    dahua sdk转springboot项目 (刷卡、刷人脸、刷二维码、刷身份证)

    查询门(开、关)状态——queryDoorStatus 查询所有用户信息 添加用户 根据用户ID查询用户信息 删除指定用户ID的用户 清空所有用户 根据用户ID查询所有卡 根据用户ID添加多张卡 根据用户ID修改多张卡 根据卡号获取...

    Button_APP:我配置了一个AWS破折号按钮,将Lyft游标调用到我的下一个Google日历事件的地址

    该按钮位于我的门旁边。 我按下按钮。 物理推动将按钮连接到我的wifi,并唤醒无服务器的AWS lambda函数。 lambda函数仅调用python脚本。 该脚本将转到我的Google日历,并检查我的下一个活动并获取该地址。 下...

    基于滚动位置旋转元素的非常简单的React组件

    默认情况下,它将使用窗口滚动油门编号 null 使用 'throttle' 道具在 X 秒内调用一次更新,从编号 0 旋转起点到编号 360 旋转终点方法字符串 'px' 使用 'perc' 更改基于滚动的旋转百分比。 循环数 1 使用方法“perc...

    校园监控系统设计方案.doc

    1、全网采用网络视频监控系统方便图像实时查看与调用 采用网络视频监控系统可以大大提高监控视频画面清晰度,可与互联网方便的进行 连接,实现图像实时查看与调用。 2、统一管理 集中存储 在监控室监视屏上可以直接...

    timezone-converter:在时区格式之间转换的可调用 PHP 类

    时区转换器一个简单而丑陋的小可调用类,用于将不同的时区格式转换为 IANA 批准的 DateTimeZones。 虽然 PHP 有一些很棒的解析来处理许多不同的日期时间格式,但它对时区并不那么宽容。 这门课有助于解决这个问题。...

    清华大学Linux操作系统原理与应用

    6.5 实例——利用系统调用实现一个调用日志收集系统 143 6.5.1 代码体系结构 143 6.5.2 把代码集成到内核中 146 6.5.3 实现步骤 148 习题6 148 第7章 内核中的同步 149 7.1 临界区和竞争状态 149 7.1.1 临界区举例 ...

    关于8335A的一些说明

    5 与82C54的计数器1输入相连 15 与82C54的计数器1门信号相连 6 与82C54的计数器0输出相连 16 与82C54的计数器0门信号相连 7 与CLK2相连 17 与82C54的计数器2输出相连 8 与82C54的计数器2输入相连 18 与开关量输入DI0...

    龙门物流管理系统(Ext+SSH)130221.rar.tar.gz

    JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其...

    Java问题定位技术.pdf

    如果您是从C++/C转到Java上的程序员,那么线程堆栈应该不是陌生的技术,但对于原 生的Java程序员来说, 很多人不清楚还有这个这个密门绝技。 什么是线程堆栈1? 线程堆栈也称 作线程调用堆栈。Java线程堆栈是虚拟机...

    C语言程序设计标准教程

     函数调用的一般形式前面已经说过,在程序中是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似。C语言中, 函数调用的一般形式为:  函数名(实际参数表) 对无参函数调用时则无实际参数表。 ...

    java常用代码

    让初学者更好的了解java这门语言的特性。 1.StringAndInt.java 字符与整型的相互转换 2.WriteFile.java 简单的IO读写文件 3.CurrentMethod.java 获取当前调用方法名 4.StringAndDate.java 字符串与时间对象的相互...

    ADC809的运用及电路

    可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。 (2)查询方式 A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询...

    [详细完整版]子程序设计.doc

    掌握子程序的调用与返回的方法 1. 了解子程序的嵌套与递归 二.实验内容与要求 编制一程序,要求键入一个班的学生成绩,并存放于50字的ERADE数组中,然后根 据ERADE中的成绩,把学生名次填入50字的RANK数组中,再按...

    海康威视java代码设备注册登录,抓拍,云台控制

    海康威视java代码设备注册登录,抓拍,云台控制,java开发demo项目打包,方便大家开发入门海康威视摄像头,本人从零基础海康威视开始研究api

    C语言编程精彩百例(附原书源代码)

     众所周知,学习新的程序设计语言的最佳途径是编写程序,而本书正是通过了对100个典型实例的分析和讲解,来帮助读者掌握这门语言并积累大量经验,从而可以熟练地进行C程序设计。  全文共分为四篇,全面、系统地...

    微信小程序语音搜索踩坑:silk文件格式转换,在PHP中使用

    直接调用微信小程序录音接口,然后上传到服务器,百度语音的接口是识别不了这种格式的文件,那么问题来了 一、如何转码?ffmpeg? 二、如何在PHP中使用? 本文将要解决这两个问题。 用到的第三方工具: 1、百度语音 ...

Global site tag (gtag.js) - Google Analytics