Шлюз виклику
Шлюз виклику (англ. call gate) — механізм у процесорній архітектурі x86, призначений для зміни рівня привілеїв задачі, і реалізований за допомогою механізму CALL FAR.
Призначення ред.
Призначення шлюзів виклику — дозволити менш привілейованому коду (такому, як звичайний застосунок) викликати код, що виконується з вищим рівнем привілеїв. Це може бути, наприклад, ядро операційної системи, або спеціальні системні бібліотеки чи драйвери, що працюють у кільцях захисту 0, 1 або 2.
Кожен шлюз виклику має відповідний селектор, що обирає відповідний дескриптор у GDT чи LDT. Схожий механізм має у архітектурі x86 обслуговування переривань.
Використання ред.
Якщо шлюз виклику коректно встановлений ядром ОС, прикладна програма здійснює інструкцію CALL FAR з потрібним селектором сегмента як аргументом. Поле «зміщення» (offset) при цьому ігнорується. Після успішної перевірки привілеїв процесор завантажує пару CS: EIP з дескриптора сегмента, і записує до стеку нового рівня привілеїв всю інформацію, потрібну для коректного відновлення програми після виклику (регістри SS, ESP, CS і EIP перерваної задачі, у вказаному порядку. При потреби зі стеку перерваної задачі копіюються параметри, їх кількість вказується у дескрипторі шлюзу.
Після закінчення обробки виклику виконання повертається назад до перерваної задачі за допомогою інструкції RET FAR.
Формат ред.
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
offset 31..16 | P | DPL | 0 | type 1 1 0 0 |
0 | 0 | 0 | count | |||||||||||||||||||||||
selector | offset 15..0 |
typedef struct _CALL_GATE
{
USHORT OffsetLow;
USHORT Selector;
UCHAR NumberOfArguments:5;
UCHAR Reserved:3;
UCHAR Type:5;
UCHAR DPL:2;
UCHAR Present:1;
USHORT OffsetHigh;
}CALL_GATE;
Див. також ред.
Джерела ред.
<ref>
з назвою "xen_blog", визначений у <references>
, не використовується в попередньому тексті.Посилання ред.
- Bringing Call Gates Back (Alex Ionescu) [Архівовано 12 квітня 2018 у Wayback Machine.]