第十七课 保护模式中的特权级(下)

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十七课 保护模式中的特权级(下)相关的知识,希望对你有一定的参考价值。

问题:

  使用调用门如何实现不同特权级代码之间的跳转(如:从高特权级到低特权级)?

不幸的事实:

  调用门只支持从低特权级到高特权级执行

  无法利用调用门从高特权级到低特权级执行

 

从高特权级的代码段通过return  far可以返回到低特权级的代码段执行。这时return  far是一个跳转指令,完成从高特权级到低特权级的跳转,这正是我们想要的。

return的本质是做跳转的,而不是我们根深蒂固的做返回的。只是最常用的方式是做返回使用。

思路整理:

  调用门的特权级跳转:

    1、通过远调用(call  far),低特权级 -> 高特权级

    2、通过远返回(retf),高特权级 -> 低特权级

 

retf的本质就是恢复cs和eip的值,因此,我们需要首先将cs和eip的值放入栈中。

需要提前知道的事实:

  x86处理器对于不同的特权级需要使用不同的栈

  每一个特权级对应一个私有的栈(最多四个栈)

  特权级跳转变化之前必须指定好相应的栈

解决方案(高特权级 -> 低特权级)

  1、指定目标栈段选择子(push)

  2、指定栈顶指针位置(push)

  3、指定目标代码段选择子(push)

  4、指定目标代码段偏移(push)

  5、跳转(retf)

 

  

 


以上是关于第十七课 保护模式中的特权级(下)的主要内容,如果未能解决你的问题,请参考以下文章

操作系统-保护模式中的特权级下

操作系统-保护模式中的特权级下

第16课 - 保护模式中的特权级(中)

任务和特权级保护——《x86汇编语言:从实模式到保护模式》读书笔记32

第十七课 vim工具的一般模式

《80X86汇编语言程序设计教程》十九 操作系统类指令与输入输出保护