如果操作系统不使用处理器的多任务机制,它仍然需要为栈创建至少一个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. 将前端js异步调用的多个服务合并为一个前端服务

    将前端js异步调用的多个服务合并为一个前端服务 1. 减少前端js异步请求的次数改善浏览体验 2. 方便地针对单个接口做异常降级处理

  2. Google Gson使用简介

    1.Google Gson在android studio的使用 gradle:compile 'com.google.code.gson:gson:2.2.4' 2.Gson 注解 @Expose 注 ...

  3. 1分钟看完 jQuery UI

    jQuery UI简介 jQuery UI包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的 ...

  4. Deep Learning 28:读论文“Multi Column Deep Neural Network for Traffic Sign Classification”-------MCDNN 简单理解

    读这篇论文“ Multi Column Deep Neural Network for Traffic Sign Classification”是为了更加理解,论文“Multi-column Deep ...

  5. (19)javaWeb项目名称修改

    1,选中项目,[右键]-[Refactor]-[Rename] 在弹出面板中,填写New Name 点击[OK] 2,改变运行时目录名称 选中项目[右键]-[Properties] 在弹框中选择选择[ ...

  6. ubuntu切换中英文通用方法,ubuntu中文语言

    1:点击桌面右上角的齿轮,选择“system settings”进入系统设置界面

  7. publish and submit

    http://blog.csdn.net/w_jewelry/article/details/8123639 1.Gerrit里点击“publish and submit”提示如下:Your chan ...

  8. android 自定义View开发实战(六) 可拖动的GridView

    1前言 由于项目需求,需要把项目的主界面采用GridView显示,并且需要根据模块优先级支持拖动图标(砍死产品狗).为此,自定义了一个支持拖拽图标的GridView.效果如下: 具体效果如上图 2 可 ...

  9. hash与map的区别联系应用

    一,hashtable原理: 哈希表又名散列表,其主要目的是用于解决数据的快速定位问题.考虑如下一个场景. 一列键值对数据,存储在一个table中,如何通过数据的关键字快速查找相应值呢?不要告诉我一个 ...

  10. STM32F4 LTDC学习

    很久没有写东西了,也很久没看文档了吼吼,觉得有点无聊,找来F4看看,主要看F429.督促自己多看多记录. 首先配置同步时序先看参考手册 下面看一个实际例子,一块439的开发板 设置: LTDC_Ini ...