Использование регистрации GS с уровня пользователя в X64 Linux - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь использовать регистр% gs для сохранения временного значения в моей программе.Я использую проход LLVM для вставки ассемблерного кода, который записывает и читает регистры.Когда я использую% fs, все работает.Но% fs используется несколькими программами / библиотеками, а% gs - нет.Когда я заменяю% fs на% gs, даже простые инструкции, такие как mov% eax,% gs: 0x0 терпят неудачу.

mov% rbx,% fs: 0x0 // Работает

mov% rbx,% gs: 0x0 // Ошибка сегментации.

(С другой стороны, mov% rbx,% gs - работает, пока значение в% eax меньше 4. Любое значение больше 4, вызывает ошибку сегментации)

Как можноЯ создаю сегмент и использую его селектор сегмента в% gs, который я могу использовать в дальнейшем в программе.

Описание машины: 64-битная Ubuntu 16.04.LLVM-7.0.1

1 Ответ

0 голосов
/ 20 мая 2019

Какой ABI вы используете? Проверьте это https://www.codemachine.com/article_x64deepdive.html "... но на X64 это регистр GS, который указывает на TEB в режиме пользователя ..."

Я бы сказал, что это невозможно с X64 ABI.

...