Встроенные средства защиты. Принципы модульности и перемещаемости. Проверка привилегированности сегмента, страница 25

1. Межсегментные передачи управления внутри кольца одинакового уровня привилегий. Такие передачи выполняются командами JMP, CALL, RET, IRET (при NT=0). Команды  JMP и CALL содержат полный логический адрес перехода, поэтому целевые значения селектора  CS  и внутрисегментного смещения IP выбираются из кода команды. При выполнении команд RET и IRET (при NT = 0) значения CS и IP берутся из стека.

2. Косвенные межсегментные передачи управления через шлюз вызова осуществляются с помощью команды CALL к тому же или более высокому уровню привилегий. Дескриптор шлюза вызова должен размещаться в таблице GDT или LDT. Чтобы передать управление шлюзу, необходимо, чтобы вызывающая программа с уровнем привилегий CPL была не менее привилегированна, чем уровень привилегий DPL шлюза. Если шлюз доступен, адрес перехода (CS : IP) выбирается из соответствующих полей шлюза. Значение смещения, указываемое в команде CALL игнорируется.

Схема поиска целевых значений CS и IP при косвенных межсегментных передачах управления через шлюз вызова имеет вид:

CALL:

 <селектор шлюза вызова>            <дескриптор шлюза вызова>          < CS : IP >

3. Косвенные межсегментные передачи управления через шлюз ловушки или прерывания. Такие передачи характерны для команд программного прерывания INT n, аппаратных прерываний и особых ситуаций (внутренних прерываний). Дескрипторы шлюзов прерываний и ловушек помещаются в таблицу IDT. В качестве индекса соответствующего шлюза прерывания и ловушки в таблице IDT используется номер аппаратного или  программного прерывания либо номер особой ситуации, автоматически вычисляемый процессором. Если шлюз доступен, адрес точки входа в процедуру обработчика (CS : IP) выбирается из соответствующих полей шлюза прерывания или ловушки.

Схема поиска целевых значений CS и IP при косвенных межсегментных передачах управления через шлюз ловушки или прерывания имеет вид:

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

 <  или шлюза прерывания>         <  или шлюза прерывания     >          < CS : IP >

в IDT                                             в IDT

4. Косвенные межсегментные передачи управления через шлюз задачи могут выполняться либо командами программных прерываний INT n, либо как реакция на внутренние или внешние прерывания, либо командами  JMP и CALL.  Шлюзы задач могут размещаться в таблицах GDT,  LDT  или  IDT. При реализации передач управления через шлюз задачи с помощью селектора, размещенного в дескрипторе шлюза задачи, выбирается дескриптор TSS, после чего запускается механизм переключения задач.

Схема поиска целевых значений CS и IP при косвенных межсегментных передачах управления через шлюз задачи имеет вид:

JMP, CALL

 <селектор шлюза >         

        задачи                                <дескриптор шлюза >          <селектор TSS > 

                                                                           

             INT n                                       <дескриптор TSS >         <сегмент TSS >        <CS : IP >

<индекс шлюза задачи>

в IDT

      5. Межсегментные передачи управления через прямое переключение задач  могут выполняться либо командой CALL (селектор целевого сегмента TSS находится в GDT, либо командой IRET (если в регистре FLAGS установлен флаг NT: в этом случае команда IRET возвращает управление вызывающей задаче, используя поле Обратной связи В текущем TSS). В качестве селектора в таких командах указывается значение, загружаемое в регистр TR.   С помощью селектора  TR  в  GDT выбирается дескриптор TSS, и запускается механизм переключения задач.

Схема поиска целевых значений CS и IP при прямом переключении задач имеет вид:

CALL:

    <селектор TSS>

                                                     <дескриптор TSS >            <сегмент TSS >            <CS : IP >          

IRET (при NT =1) :

селектор TR из

<поля обратной связи>

сегмента TSS