Почему попытка сборки кода с флагом fPIC выдает ошибку?
#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х, конфликтует с ним.
Комментариев нет:
Отправить комментарий