x86的DPL,RPL,CPL

本文详细介绍了x86处理器中的三种特权级——CPL、RPL和DPL的概念及其在数据段、堆栈段和代码段访问中的作用。内容涵盖JMP和CALL指令的特权级检查、调用门的使用以及陷阱门和中断门的特权保护机制。重点解析了不同特权级间的控制转移规则,特别是conforming和nonconforming代码段的访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cpu之DPL,RPL,CPL 之间的联系和区别
官方文档Intel’s software developer manuals,“Privilege Levels” 和 “Checking Caller Access Privileges”这两节。
目前在网上查找的中文资料中,以这篇最为详细,故在此做一步简单的总结以及加入一些个人的理解。有兴趣的同学可以去阅读一下官方文档。
在X86中,存在着3种特权级的描述,分别是CPL,RPL和DPL。

1. CPL,RPL,DPL概念

《x86汇编语言从实模式到保护模式》第十一章和第十四章

  • CPL(CS.RPL)是CS寄存器里bit 0和bit 1 位组合所得的值.在某一时刻就只有这个值唯一的代表程序的CPL。

  • RPL是段选择子里面的bit 0和bit 1位组合所得的值。
    在这里插入图片描述

  • DPL是段描述符中的特权级, 它的本意是用来代表它所描述的段的特权级。

注意:CS寄存器本身也是存放着段选择子的,但是其bit0和bit1表示的不再是RPL而是CPL。

2. 对数据段和堆栈段访问时的特权级控制

处理器对数据段的访问是通过DS寄存器来进行的。DS寄存器中的段选择子的前12个字节表示描述符索引,指向GDT中的一个段描述符,段描述符的DPL表示该地址段的特权级。DS寄存器的后2bit表示其RPL。
在这里插入图片描述
只有当CPL <= DPL 且 RPL <= DPL的情况下,才能访问相应的数据段(0表示特权级最高,3表示特权级最低)。即此时CS寄存器的最后2个bit的值以及DS寄存器最后两个bit的值均要小于DS寄存器指向的段描述符的DP

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值