g++: отключить использование сегментного регистра

Я работаю над анализом двоичного кода и реверс-инжинирингом над x86 32-bit Ubuntu 14.04. Я использую g++ 4.8.4 для компиляции программы C++.

Мне интересно, можно ли запретить компилятору использовать регистры сегментов. Например, gs.

Пример использования приведен ниже:

mov    %gs:0x8,%ebx

Я знаю, что некоторые сегментные регистры используются для проверки канареек стека. Однако, даже если бы я отключил такую ​​проверку (-fno-stack-protector), всё равно вариантов использования сегментных регистров довольно много...


person lllllllllllll    schedule 08.09.2016    source источник
comment
У вас есть пример кода? Затем вы можете попробовать несколько перестановок на godbolt.   -  person Kerrek SB    schedule 09.09.2016
comment
Если это x86-32, он также используется для доступа к локальному хранилищу потоков как часть ELF ABI. Я написал ответ по TLS-адресации.   -  person Brett Hale    schedule 09.09.2016
comment
Что вы имеете в виду довольно много использований? Являются ли большинство из них регистром сегмента по умолчанию для операции и просто отображаются дизассемблером? например %es:(%edi) для STOS?? Если это так, в вашем коде нет префиксов переопределения сегментов, это просто ваш дизассемблер слишком многословен. Вместо этого посмотрите на вывод asm компилятора (gcc -O3 -S): stackoverflow.com/questions/38552116/   -  person Peter Cordes    schedule 09.09.2016