如果操作系统不使用处理器的多任务机制,它仍然需要为栈创建至少一个TSS

  当程序通过调用门改变特权级的时候,处理器执行下面的步骤切换栈,并且执行被调用的程序在新的特权级

  1.  使用目标代码段的DPL从TSS中选择栈段选择子和栈指针

  2.  从当前TSS读取被切换的栈段选择子和栈指针。当读取栈段选择子,栈指针或者栈段描述符的时候,任何界限违规都会造成#TS异常

  3.  检测栈段描述符的类型和特权级是否正确,如果违规了,则会产生#TS异常

  4.  暂时保存当前的SS和ESP寄存器的值

  5.  加载新栈的段选择子和栈指针到SS和ESP寄存器

  6.  把暂时被保存的SS和EIP寄存器的值压入新栈

  7.  从调用者的栈复制调用门的参数数量字段指定的参数个数到新栈。如果参数数量是0,则没有参数被复制

  8.  把返回指令指针(当前CS和EIP寄存器的值)压入到新栈

  9.  加载新代码段的段选择子和调用门中指定的指令指针到CS和EIP寄存器,然后开始执行被调用的程序

  总结:选择->读取->加载SS和ESP->压入调用者的SS和ESP->压入调用者的参数->压入返回指令指针->加载目标代码段的地址到CS和EIP中->go

  调用门中的参数数量字段指定了处理器应该从调用者栈复制到被调用程序栈的数据项数量(最多31个数据项),如果数据项超过31位被复制,参数可以成为指向数据结构的指针,或者被保存的SS和EIP寄存器的内容可以用于访问旧栈中的参数,数据项被复制的size取决于调用门的size

  

5.8.6  从被调用的程序中返回

  RET指令能用于执行近返回,同等特权级的远返回,和不同特权级的远返回. 这个指令主要用于从曾经用CALL指令调用的被调用过程中返回。它不支持从JMP指令返回,因此JMP指令不在栈上保存返回指令指针

  近返回紧急转移程序控制在当前代码段内;因此,处理器紧急执行界限检查,当处理器从栈中POP返回指令指针到EIP寄存器中时,它会检查指针是否会超过当前代码段的界限

  同等特权级的远返回上,处理器从栈上Pop被返回的代码段的段选择子和返回指令指针。正常环境下,这些指针应该是有效的,因为它们是通过CALL指令PUSH到栈中的。然而,

临时笔记 Protection的更多相关文章

  1. C#之 HashSet(临时笔记,未参考资料,请慎重)

    HashSet是一个集合,类似于DataSet,但是其主要用途是用来存放同一种类型的元素(string.row.table等),如果添加的元素跟定义时初始的类型不一致,就会直接编译失败. 例如: Ha ...

  2. 临时笔记:flume+ CDH 的 twitter实例

    http://www.slideshare.net/OpenAnayticsMeetup/analyzing-twitter-data-with-hadoop-17718553 http://www. ...

  3. unity 人工智能AI,装备解锁临时笔记

    A*算法的一种改进设想:1.如何让角色到达目标点的过程中更加平滑:获取一串到达目标点的网格串之后,就实时用带形状的物理射线检测能否直接到达下一个目标点的再下一个目标点,如果能到达,那么直接朝该方向运动 ...

  4. activiti 临时笔记mark

    public class TenMinuteTutorial { public static void main(String[] args) { // Create Activiti process ...

  5. vue学习第四天 ------ 临时笔记

    1.驼峰写法 在html标签中,由于html的特性是不区分大小写(比如LI和li是一样的),因此,html标签中要传递的值要写成短横线式的(如btn-test),以区分大小写. 在props的数组中, ...

  6. vue学习第三天 ------ 临时笔记

    说明:之前两天属于入门,文章可能存在片段信息 vue2.x+webpack快速搭建前端项目框架详解 http://www.jb51.net/article/129463.htmVue cli + We ...

  7. vue学习第二天 ------ 临时笔记

    学习链接: vue.js官方文档: https://cn.vuejs.org/v2/guide/index.html vue.js API: https://cn.vuejs.org/v2/api/# ...

  8. vue学习第一天 ------ 临时笔记

    学习链接 Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述 http://blog.csdn.net/fungleo/article/detai ...

  9. Python临时笔记

    动态语言python的特性 python2  输入一个匿名函数直接执行 # coding=utf-8 def Test(a, b, func): result = func(a, b) return ...

随机推荐

  1. flask 文件下载 文件服务器 请求参数 函数修饰符

    180M电子书 通过已经下载到pc,在上传到私有公网服务器,之后,再异地下载 以下代码,文件内容错乱 [root@bigdata-server- mydataweb]# tree . ├── mydl ...

  2. css中vertical-align和line-height的用法

    css中vertical-align和line-height的用法 1.先来看一种现象: (1).将一个图片放入一个div块中,div块背景颜色设置为aquamarine.将会发现图片与div块下边沿 ...

  3. beego07----web博客

    conf/app.conf appname = blog1 httpport = 8080 runmode = dev name=admin pwd=admin controllersmy/attac ...

  4. Android Studio3.1.0升级问题记录

    每次升级Android Studio时,一般情况下Gradle版本的也会相应的升级,我之前Android Studio 3.0.1.Gradle 是4.1升级后为:Android Studio 3.1 ...

  5. AnimatorCompatHelper clearInterpolator

    supportLib 26.0.0+以上AnimatorCompatHelper类被移除 所以clearInterpolator(view)找不到 替换方案: TimeInterpolator mDe ...

  6. AOP 基本术语及其在 Spring 中的实现

    无论是 Spring 还是其他支持 AOP(Aspect Oriented Programming)的框架,尤其是 Spring 这种基于 Java(彻底的面向对象)的语言,在实现 AOP 时,首先为 ...

  7. bzoj4052

    gcd 跟那道cf题是一个原理... 每一时刻我们最多有log个gcd,那么我们用map存储每种gcd最左端,每次和新的数gcd就更新新的gcd的最左端,然后更新答案 #include<bits ...

  8. java jdbc 与mysql连接的基本步骤

    Java与mysql链接的基本步骤: 第一步:注册驱动 方法一: DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 方法二:设置属性 ...

  9. bzoj 4033: [HAOI2015]树上染色【树形dp】

    准确的说应该叫树上分组背包?并不知道我写的这个叫啥 设计状态f[u][j]为在以点u为根的子树中有j个黑点,转移的时候另开一个数组,不能在原数组更新(因为会用到没更新时候的状态),方程式为g[j+k] ...

  10. Visual Studio 2015 个版本下载

    Visual Studio 2015是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等.所写的目标代码适用于微软支持的所有 ...