64-разрядный дескриптор шлюза IDT IA-32e - PullRequest
8 голосов
/ 27 ноября 2011

В 64-битном дескрипторе Intel IDT Gate есть селектор сегмента. Однако, насколько я понимаю из 5-ти частей руководства Intel, линейный адрес обработчика прерываний загружается в RIP с 64-разрядного смещения, указанного в дескрипторе шлюза IDT.

Единственным использованием селектора сегмента является проверка:

  1. при изменении уровня привилегий
  2. Обработчик прерываний действительно указывает на сегмент кода

Тогда мои вопросы:

  1. RIP берется только из 64-битного смещения? Или RIP = смещение (знак расширен до 64 бит) + база селектора сегмента?
  2. Игнорируется ли базовый адрес, на который указывает селектор сегмента в дескрипторе шлюза IDT? Или это имеет смысл?

Большое спасибо заранее!

1 Ответ

6 голосов
/ 27 ноября 2011

Если я правильно понимаю, согласно руководствам Intel, x64 не использует сегментацию. Я прочитал Системное программирование AMD для AMD64 , чтобы понять это, так как их объяснения гораздо легче понять, поскольку они явно имеют дело с x86_64 (они, я полагаю, изобрели его); они заявляют:

В длинном режиме эффекты сегментации зависят от того, работает ли процессор в совместимости режим или 64-битный режим:

  • В режиме совместимости сегментация работает так же, как и в устаревшем режиме, используя устаревшую семантику защищенного 16-битного или 32-битного режима.
  • 64-битный режим, сегментация отключена, создается плоское 64-битное виртуальное адресное пространство. Как будет видно, некоторые функции некоторых регистры сегментов, в частности регистры сегментов системы, продолжаются для использования в 64-битном режиме.

В частности, ищите раздел 4.8 Дескрипторы сегмента длинного режима. Чтобы ответить на ваш второй вопрос:

Поля, игнорируемые в 64-битном режиме. Сегментация отключена в 64-битной режим и сегменты кода охватывают всю виртуальную память. В этом режиме базовые адреса сегмента кода игнорируются. Для расчета виртуального адреса базовый адрес обрабатывается так, как если бы он имел значение ноль.

Для интерпретации: поскольку «сегмент» в x86_64 является целым адресным пространством, базовый адрес не имеет смысла, кроме 0, поскольку все смещения являются абсолютными (относительно 0).

Таким образом, это ответило бы на первый вопрос, который я считаю - RIP принимается как 64-битное значение смещения. Со страницы описания ворот той же главы:

В длинном режиме дескрипторы шлюза расширяются на 64 бита, что позволяет им хранить 64-битные смещения.

Это становится более сложным при работе с сегментами данных, хотя:

Сегменты данных, на которые ссылаются регистры сегментов FS и GS, получают специальную обработку в 64-битном режиме. Режим. Для этих сегментов поле базового адреса не игнорируется, и можно использовать ненулевое значение в виртуально-адресных расчетах. 64-битный адрес базы сегмента может быть указан с помощью конкретные регистры. См. «Регистры FS и GS в 64-битном режиме» на стр. 70 для получения дополнительной информации.

В этом разделе говорится:

FS и GS регистры в 64-битном режиме. В отличие от сегментов CS, DS, ES и SS, FS и GS переопределения сегментов могут использоваться в 64-битном режиме. Когда переопределения сегментов FS и GS используются в 64-битном режиме В этом режиме соответствующие базовые адреса используются при расчете эффективного адреса (EA). Полный В этом случае расчет советника становится (FS или GS). Base + base + (scale * индекс) + смещение. FS.base и значения GS.base также расширены до полного размера 64-битного виртуального адреса, как показано на рисунке 4-5. В результате расчета советника разрешено переносить на положительные и отрицательные адреса.

В 64-битном режиме переопределения сегментов FS и GS не проверяются на наличие ограничений или атрибутов. Вместо, процессор проверяет, что все ссылки на виртуальные адреса находятся в канонической форме.

Другими словами, сегменты данных могут действовать так же, как используется сегментация, хотя проверяется только форма сегментации, а не проверяется, находится ли форма доступа в границах сегмента.

Я думаю, что это правильное толкование; однако исправления / указатели очень ценятся.

...