如果操作系统不使用处理器的多任务机制,它仍然需要为栈创建至少一个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. Latex 2: 解决WinEdt和TexWorks用久之后忽然不能正反向搜索

    说明:下面说的WinEdt版本是10.1,TexWorks是texlive2016中自带的texworks,如果情况不一样请自行测试,原理一样 1.不能正向搜索: 解决:① 确定路径名是英文名(实际上 ...

  2. Count on an IEnumerable<dynamic>

    http://stackoverflow.com/questions/7733305/count-on-an-ienumerabledynamic int count = Enumerable.Cou ...

  3. POJ3692 Kindergarten —— 二分图最大团

    题目链接:http://poj.org/problem?id=3692 Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

  4. YTU 2918: Shape系列-5

    2919: Shape系列-5 时间限制: 1 Sec  内存限制: 128 MB 提交: 251  解决: 199 题目描述 JC和Kitty听说小亮和小华有了Rectangle和Circle并用R ...

  5. 给Xcode增加复制行、删除行快捷键的方法

    运行: sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKey ...

  6. 四:网络--NSURLConnection基本使用

    一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... ...

  7. 在 Ubuntu 16.04 中安装支持 CPU 和 GPU 的 Google TensorFlow 神经网络软件

    TensorFlow 是用于机器学习任务的开源软件.它的创建者 Google 希望提供一个强大的工具以帮助开发者探索和建立基于机器学习的应用,所以他们在去年作为开源项目发布了它.TensorFlow ...

  8. 洛谷 P2444 [ POI 2000 ] 病毒 —— AC自动机+dfs

    题目:https://www.luogu.org/problemnew/show/P2444 AC自动机上 dfs,不走结尾点,如果走出环就是有无限长度的串: RE无数,原来是数组开成 2000 的了 ...

  9. virtualbox安装完系统之后重新启动重新进入安装界面原因

    安装完成之后如果重新启动出现卡死的情况,直接关闭掉virtualbox,然后重新启动. 在这里记得完成安装后再改下设置,把Storage里的IDE控制器设为没有盘片,否则下次启动时又是安装界面.

  10. light oj 1205(数位DP)

    题目描述: 求给定区间中的回文数有多少个? 首先明确一点,如果一个数是回文数,那么给这个数两边加上相同的数,那么这个数还是回文数. 根据这点就可以进行递推了,p[start][end]=9*p[sta ...