Дескриптор шлюза

Дескриптор шлюза — служебная структура данных, служащая для различных переходов. Используется только в защищённом режиме. В реальном режиме некоторым аналогом может служить дальний адрес. Длина дескриптора стандартна и равна восьми байтам.

Смещение (англ. Offset, жёлтые поля) — смещение процедуры в сегменте кода;

Селектор (англ. Selector, оранжевое поле) — селектор сегмента процедуры, на который происходит переход. Может быть сегментом кода или TSS;

Количество параметров (англ. Words count, голубое поле, биты 32-36) — количество слов (16-разрядный стек) или двойных слов (32-разрядный стек), копируемых из стека вызывающей программы в стек вызываемой процедуры. Актуально только при смене уровня привилегий; используется только в шлюзах вызова (Call Gate)

Тип/права доступа (голубые поля, биты 40-47) — права доступа к шлюзу и его тип (см. Дескриптор сегмента — типы системных сегментов).Селектор и смещение составляют обычный дальний адрес точки входа в процедуру.

При выполнении дальних команд CALL, JMP с указанием селектора шлюза, значение смещения, указываемого в команде игнорируется.

Алгоритм перехода с использованием шлюза:

  • Если уровень привилегий вызываемого сегмента кода численно меньше CPL, то происходит смена стека: из соответствующих полей TSS загружаются новые значения SS, (E)SP;
  • Если была смена стека, то в новый стек сохраняется предыдущие значения SS, (E)SP (до вызова);
  • Если была смена стека, а шлюз является шлюзом вызова, то в новый стек копируются WC слов/двойных слов из стека вызывающей программы;
  • Если это шлюз прерывания или ловушки, то сохраняется значение (E)Flags;
  • Сохраняется текущее значение CS, (E)IP;

Из дескриптора шлюза в регистры CS:(E)IP загружается новый дальний адрес, указанный в соответствующих полях дескриптора;Теперь подробнее:

Источник: Википедия

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я