Проверка типа сегмента

Поле лимита проверяется граница сегмента запрещает доступ к памяти за пределами сегмента. Если бит G дескриптора равен нулю, значения лимита могут быть от 0 до FFFFFh (1 Мб). Если бит G установлен — от FFFh (4 Кб) до FFFFFFFFh (4 Гб). Для сегментов, растущих вниз, лимит принимает значения от указанного плюс 1 до FFFFh для 16-битных сегментов данных и до FFFFFFFFh — для 32-битных. Эти проверки отлавливают такие ошибки, как неправильные вычисления адресов.

  1. Проверка типа сегмента;

Например, проверяется загрузка селектора (и дескриптора) в регистр: в CS можно загрузить только сегмент кода; в регистры DS, ES, FS, GS нельзя загрузить селектор на нечитаемый сегмент кода; в SSнельзя загрузить селектор, который указывает на незаписываемый сегмент. Проверяются обращения к памяти: никакая команда не может писать в сегмент кода и т.д.

  1. Проверка привилегий;

Поскольку существуют ограничения на доступ к данным, проводится проверка, может ли программа обратиться к данным. Например, прикладная программа пытается выполнить следующую команду:

mov dword ptr ds:[00000000h],0.

Этот сегмент имеет уровень привилегий 00 (используется ОС), значит прикладная программа не может получить доступ к запрашиваемому адресу, генерируется исключение.

Как уже говорилось выше, существуют следующие уровни сегментной защиты: 0 — ядро ОС, 1,2 – службы ОС (драйвера, и т.д.), 3 – приложения.

Соответственно, существуют следующие типы уровней привилегий:

    • СPL (Current Privilege Level) — текущийуровеньпривилегий. Хранится в битах 0-1 регистра CS, уровень привилегий исполняемого кода (в наших примерах, это уровень привилегий сегмента, который запрашивает какие-либо данные).
    • DPL (DescriptorsPrivilegeLevel) — уровень привилегий сегмента. Хранится в дескрипторе каждого сегмента. Уровень привилегий сегмента кода – уровень привилегий программы (уровень привилегий сегмента, данные которого запрашиваются).
    • RPL (RequestorPrivilege  Level) – уровень привилегий запроса. Хранится в битах 0-1 каждого селектора (уровень привилегий, который запрашиваемая программа хочет получить).
  1. Проверка привилегий на передачу управления;

Такая проверка связана с тем, что из программы можно вызвать другие части кода, но не любой код.

  1. Ограничение на выполнение привилегированных команд.

Проверки не приводят к замедлению работы процессора. Если процессор констатирует факт нарушения, формируется исключение #GP и ОС передает управление обработчику исключений.

Ссылка на основную публикацию
Adblock detector