自定义操作系统上的当前x86权限级别

时间:2015-07-23 12:13:54

标签: assembly x86 privilege

在受保护模式的x86上运行的自定义操作系统中,有没有办法获得当前的权限级别,除了例如执行特权指令并查看它是否崩溃?

例如,寄存器CR0包含PE位,表示我们是在实模式还是保护模式下运行,并且可以使用汇编代码轻松检索。

是否存在与特权级别相同的内容?

Intel architecture software developer manual提到EFLAGS寄存器包含两个与I / O权限级别相关的IOPL位。这与当前特权级别(CPL)相同吗?

1 个答案:

答案 0 :(得分:4)

不,不一样。那些代表io特权级别。某些说明(例如INOUTCLI需要使用IOPLCPL确定的权限。

另见:

  

IOPL I / O特权级别字段(位12和13) - 表示I / O.   特权        当前正在运行的程序或任务的级别(IOPL)。 CPL的        当前运行的程序或任务必须小于或等于IOPL        访问I / O地址空间。

CPL只能从CS选择器中读取为两个最低位:

mov ax, cs
and ax, 3

这当然只适用于保护模式。