Перемещение по кодовому сегменту командами CALL,JMP


При передаче контроля без использования шлюза, проводят следующие проверки: Проверка текущего уровня программы (CS), запрашиваемый уровень (находится в операнде), уровень привилегий дескриптора (в таблице дескрипторов). При доступе к некомфортному сегменту текущий уровень CPL должен быть равен уровне привилегий кодового сегмента, который хотим загрузить, DPL (RPL не проверяем). При доступе к конформному сегменту: Текущий уровень вызывающей процедуры должен быть CPL>=DPL.

Шлюзовой дескриптор — это дескриптор, который используется для передачи управления между кодовыми сегментами разных уровней привилегий: 4 вида. шлюз вызова, шлюз ловушки, *шлюз прерывания, *шлюз задач (*- используется в исключительных случаях). Шлюз вызова может располагаться в таблице как локальных так и глобальных дескрипторов.

Структура дескриптора шлюза вызова:

15

Смещение

Р

DPL

0

Тип 1100

Колич

параметр

Селектор

Смещение

Шлюз 1) поддерживает возможность получить доступ к кодовому сегменту 2) определяет точку входа в процедуру вызываемого сегмента 3) определяет уровень привилегий необходимый вызывающей процедуре для доступа 4) если происходит переключение стека, определяет количество параметров, передаваемых вызываемой процедуре 5) определяет размер данных передаваемых через стек. 6) определяет правильность шлюзов дескриптора.

Доступ к кодовому сегменту через шлюз вызова.

Перед эти надо проверить: соответствие текущего уровня привилегий, соответствие запрашиваемого уровня привилегий на шлюз, уровень привилегий шлюза, уровень привилегий дескриптора. Поле DPL шлюзового дескриптора определяет численно самый высокий уровень привилегий, который должен иметь процедура для доступа к шлюзу.

Загрузка...