Страницы

Поиск по вопросам

среда, 17 июля 2019 г.

Встроенный ассемблер и перемещаемый код в gcc

Почему попытка сборки кода с флагом fPIC выдает ошибку? #include #include
int main() { __asm__ __volatile__ ("int $0x80" : : "a"(__NR_exit), "b"(0)); } Сборка: $ gcc -fPIC -o exit exit.c && ./exit ; echo $? Ошибка: exit.c: In function ‘main’: exit.c:6: error: can't find a register in class ‘BREG’ while reloading ‘asm’ exit.c:6: error: ‘asm’ operand has impossible constraints


Ответ

На i386 позиционно независимый код обычно использует ebx для хранения адреса таблицы глобальных смещений. Поэтому ассемблер, также использующий регистр ebх, конфликтует с ним.

Комментариев нет:

Отправить комментарий