用户态修改RPL疑问?
本帖最后由 _nosay 于 2016-01-26 23:48 编辑保护模式下:
15~3: 段描述符表下标
2: GDTR/LDTR
1~0: RPL
由于访问GDTR/LDTR的指令是“特权指令”,所以用户态不知道段描述符在什么位置,也就不能通过修改描述符的DPL值,来降低这个段对“访问者”的权限要求。
但是,不用担心用户程序通过修改段寄存器的RPL来提升本身的权限,从而达到访问目标段的目的吗?
实模式中,可以通过通用寄存器直接给DS、ES、SS赋值,CS段寄存器,也可以通过jmp,call,ret这些指令赋值,所以如果保护模式中,也可以对这四个段寄存器间接或直接的赋值,那不是很容易就修改RPL吗?所以请问保护模式是如何保证段寄存器不被随意修改的,至少不可以把“MOV”设置为“特权指令”,难道是把相应的机器码设置成“特权指令”了吗?
http: //demo.netfoucs.com/trochiluses/article/details/19573651
1. mov普通寄存器和mov段寄存器的opcode的确不一样。
2. 除了rpl,dpl也在保护模式的访问控制中起作用。
以下摘自Intel手册
IF DS, ES, FS, or GS is loaded with non-NULL selector
THEN
IF segment selector index is outside descriptor table limits
or segment is not a data or readable code segment
or ((segment is a data or nonconforming code segment)
or ((RPL > DPL) and (CPL > DPL))
THEN #GP(selector); FI;
IF segment not marked present
THEN #NP(selector);
ELSE
SegmentRegister ← segment selector;
SegmentRegister ← segment descriptor; FI;
FI; nswcfd 发表于 2016-01-27 15:02 static/image/common/back.gif
1. mov普通寄存器和mov段寄存器的opcode的确不一样。
2. 除了rpl,dpl也在保护模式的访问控制中起作用。 ...
@nswcfd 我要跟你做朋友 {:qq13:}。 :lol
硬件手册多看看没有坏处 nswcfd 发表于 2016-01-28 11:09 static/image/common/back.gif
硬件手册多看看没有坏处
嗯,是的,我也知道这样的问题肯定能从手册找到答案,但是经验还没积累到位,不会确定答案在手册的哪些部分,所以就优先来问大活人了,这样整个学习进度可能会快一点,这也正是除了手册,还有论坛和社区的意义吧,以后多多指点噢 {:qq13:} 。
页:
[1]