关于保护模式编程的几个问题

zswolf2000 2008-12-23 03:57:20
处理器在执行上述段间转移指令向目标代码段实施转移的过程中,一般至少要经过如下步骤:
(1)判断目标地址指针内的选择子指示的描述符是否为空描述符。空描述符是GDT中的第0个描述符,是一个特殊的描述符。目标代码段描述符不能为空描述符,也即选择子的高14位不能为0。
(2)从全局或局部描述符表内读出目标代码段描述符。由选择子内的TI位,确定使用全局描述符表还是局部描述符表。
(3)根据情况,检测描述符类型是否正确;调整RPL。这里是啥意思?
(4)把目标代码段描述符内的有关内容装载到CS高速缓冲寄存器。
(5)判断目标地址指针内的偏移是否越出代码段的界限。目标地址指针内的偏移必须不超过目标代码段界限。
(6)装载CS段寄存器和指令指针寄存器EIP;CPL存入CS内选择子的RPL字段。
上述步骤只是对转移过程的简单说明,实际的动作还要复杂。在把目标代码段描述符内的有关内容转载到CS高速缓冲寄存器时,还要进行如下保护检测,其中的DPL表示目标代码段描述符的特权级:
(1)对于非一致代码段,要求CPL=DPL,RPL<=DPL;对于一致代码段,要求CPL>=DPL。
(2)代码段必须存在,即描述符中的P位必须是1。
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaopoy 2008-12-28
  • 打赏
  • 举报
回复
Intel 64及IA-32 架构软件开发者手册,第三卷:系统编程指导 有详细的叙述

CPL就是转移pointer code到目标所需要特权级(这里,CPL是执行调用的代码段的特权级,即执行调用或跳转程序所在的代码段的CPL。)
RPL是段选择子里面的一个属性,标志着访问本段所需要的特权级.
进行用户想要的访问需要DPL>=max(CPL,RPL).
wwwhhb4002 2008-12-28
  • 打赏
  • 举报
回复

学习
piaomiaoju 2008-12-25
  • 打赏
  • 举报
回复
mark
chixiao 2008-12-25
  • 打赏
  • 举报
回复
6)装载CS段寄存器和指令指针寄存器EIP;CPL存入CS内选择子的RPL字段。

选择子的低两位是RPL.
CS寄存器的低两位是CPL.
要是把一个选择子成功地加载到CS里,CS低两位也就是CPL变成RPL的值了!

另外楼主看的什么书啊?
xingtaoqq 2008-12-23
  • 打赏
  • 举报
回复
操作系统过程往往用RPL(Rquested Privilege Level)来避免低特权级应用程序访问高特权级段内的数据。当操作系统(被调用过程)从一个应用程序(调用过程)接收到一个选择子时,将会把选择子的RPL设成调用者的特权级。于是,当操作系统用这个选择子去访问相应的段时,处理器将会用调用过程的特权级(已经被存入RPL中),而不是更低的操作系统过程的特权级(CPL)进行特权级检验。这样,RPL就保证了操作系统不会代表一个程序去访问一个段,除非这个程序本身是有权限的。
我从《自己亲手写操作系统》看的,也理解不是很深,如果不理解,就找这本书看一下第三章和第四章。
zswolf2000 2008-12-23
  • 打赏
  • 举报
回复
还有CPL存入CS内选择子的RPL字段。 是什么意思?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧