对第五章的补充
Windows下可执行文件的格式是PE,exe也是文件名的一部分,真正可运行的格式是pe
段描述符的结构 高8位段界限 G:粒度位,1表示粒度为4KB;0表示粒度为0 DPL:段描述符中的一个字段,指定访问该段所需的最低特权级,值的范围:0-3 0最高,3最低 当程序尝试访问某个段时,处理器会比较CPL和RPL的组合与段段DPL,如果CPL和RPL都小于等于DPL,则访问被允许 RPL:与段选择子相关的两位字段,表示段选择子本身的权限级别。 作用:用来限制访问段时的权限。它不是当前程序的实际权限,而是用于计算有效权限的一个因素。有效权限=max(CPL,RPL)
CPL:表示当前正在运行的代码的特权级别,是处理器的状态字段,存储在CS
作用:表示当前代码运行在那个特权级别,决定当前代码可以访问的资源范围。
CPL会随特权级别的切换而改变,当用户态程序调用内核功能时,通过特定机制(如系统调用)切换到更高权限的内核态(CPL 变为 0)。
一致性代码段:依从代码段,Conforming,用来实现从低特权级的代码向高特权级的代码转移。一 致性代码段是指如果自己是转移后的目标段,自己的特权级(DPL)一定要大于等于转移前的 CPL,即数值 上 CPL≥DPL,也就是一致性代码段的 DPL 是权限的上限,任何在此权限之下的特权级都可以转到此代码 段上执行。
如果该段为非系统段,可以用type字段中的c位表示,c=1:一致性代码段,c=0:非一致性代码段
非一致性代码段只能平级转移
关于为什么需要RPL
首先,要记住,特权级是数字越小,级别越高。数字大的其实权限是低的。
其次,每次对段选择子检查权限的时候,是通过EPL,EPL=MAX(RPL,CPL)。max取的是大的值,值越大,访问的权限是越低的!!!
由此,虽然CPL的数字小,运行时的特权级高,但是在检查它的访问特权级时,如果RPL大,特权级低,它就不能进行访问。所以通过RPL就可以提高安全性,在一些CPL想访问高特权级的资料的时候就会被限制。
写这个主要是有点操蛋,分不清楚特权级大小和数字的关系,DPL的作用是比较好理解的,RPL在这里其实也就挺迷惑的,这下能明白点了。
后记:在结束了课设,面试,期末之后算是重新开始拿起来了吧,这是对第五章一些原文中看到的东西的补充,不知道该怎么合就单拎出来了。
什么时候能把这个结束啊。。。
版权声明:
作者:Paul
链接:https://www.15ivyy.site/index.php/2025/01/13/ddwzdbc/
来源:somethingFromPaul
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论