Как используются __addgs * и что такое GS? - PullRequest
2 голосов
/ 24 ноября 2011

На сайте Microsoft можно найти некоторые детали из

__addgsbyte  ( offset, data )
__addgsword  ( offset, data )
__addgsdword ( offset, data )
__addgsqword ( offset, data )

встроенные функции. Установлено, что

offset

- это смещение от начала GS . Я предполагаю, что GS относится к регистру процессора.

Как GS относится к стеку, если вообще? В качестве альтернативы, как я могу рассчитать смещение с учетом GS ?

(И есть ли какие-то «ошибки», связанные с этим и конкретными соглашениями о вызовах, например

__fastcall

?)

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

эти встроенные функции, наряду с их аналогами fs, не имеют никакого реального использования, кроме как для доступа к данным, специфичным для ОС, поэтому наиболее вероятно, что они были добавлены исключительно для облегчения жизни разработчиков Windows (я лично использовал это для встроенного доступа TLS). )

1 голос
/ 24 ноября 2011

Регистр GS вообще не относится к стеку и, следовательно, не имеет отношения к соглашениям о позывных. В 64-разрядных версиях Windows он используется для указания на данные операционной системы:

Из Википедия :

Вместо дескриптора сегмента FS в x86-версиях Windows NT семейство, дескриптор сегмента GS используется для указания на две операционные системы определенные структуры: блок информации о потоке (NT_TIB) в режиме пользователя и Регион управления процессором (KPCR) в режиме ядра. Так, например, в пользовательский режим GS: 0 - это адрес первого участника темы Информационный блок. Поддержание этого соглашения сделало порт x86-64 проще, но требуется AMD, чтобы сохранить функции FS и GS сегменты в длинном режиме - хотя сегментированная адресация сама по себе не действительно используется любой современной операционной системой.

Обратите внимание, что эти встроенные функции доступны только в режиме ядра (например, драйверы устройств). Чтобы рассчитать смещение, вам нужно знать, на какой сегмент памяти указывает GS. Таким образом, в режиме ядра вам нужно знать расположение области управления процессором.

Лично я не знаю, как их использовать.

...