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