Текущий уровень привилегий x86 в пользовательской ОС
В пользовательской ОС, работающей на x86 в защищенном режиме, есть ли способ получить текущий уровень привилегий, кроме, например, выполнения привилегированной инструкции и проверки сбоя?
Например, зарегистрироваться CR0
содержит PE
бит, который указывает, работаем ли мы в реальном режиме или в защищенном режиме, и может быть легко получен с использованием кода сборки.
Есть ли что-то эквивалентное для уровня привилегий?
В руководстве разработчика программного обеспечения для архитектуры Intel упоминается, что EFLAGS
регистр содержит два IOPL
биты, связанные с уровнями привилегий ввода / вывода. Это то же самое, что текущий уровень привилегий (CPL)?
1 ответ
Нет, это не то же самое. Они представляют уровень привилегий io. Некоторые инструкции, такие как IN
, OUT
, CLI
требовать привилегий, которые определяются с помощью IOPL
и CPL
,
Смотрите также:
Поле уровня привилегий ввода / вывода IOPL (биты 12 и 13) - указывает уровень привилегий ввода / вывода (IOPL) выполняемой в данный момент программы или задачи. CPL текущей запущенной программы или задачи должен быть меньше или равен IOPL для доступа к адресному пространству ввода / вывода.
CPL
можно прочитать просто из CS
селектор как два младших бита:
mov ax, cs
and ax, 3
Это, конечно, работает только в защищенном режиме.