Текущий уровень привилегий 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

Это, конечно, работает только в защищенном режиме.

Другие вопросы по тегам