2017-02-21 28 views
2

Я пытаюсь скомпилировать C исполняемый на Kali Linux: https://www.exploit-db.com/exploits/17787/Компиляция файла C с GCC генерирует ошибку?

# gcc -o out 17787.c -lrt 
/usr/bin/ld: /tmp/ccv59WCS.o: relocation R_X86_64_32S against symbol `kernel_code' can not be used when making a shared object; recompile with -fPIC 
/usr/bin/ld: final link failed: Nonrepresentable section on output 
collect2: error: ld returned 1 exit status 

Кто-нибудь знает, почему это происходит, и почему он думает, что я пытаюсь составить общий объект? Насколько я знаю, это должно просто генерировать исполняемый файл ELF ...

# gcc --version 
gcc (Debian 6.3.0-6) 6.3.0 20170205 

# uname -a 
Linux kali 4.9.0-kali2-amd64 #1 SMP Debian 4.9.10-1kali1 (2017-02-20) x86_64 GNU/Linux 

Спасибо!

+3

Обратите внимание, что это не ошибка в компиляции, это ошибка при связывании. Возможно, ваш 'gcc' настроен на создание общих объектов по умолчанию, поэтому вам нужно явно указать, что вы хотите, чтобы он был статичным. – Hurkyl

+0

Спасибо .. Знаете ли вы, где это настроено? – James

+1

Рассматривали ли вы попытку совета, приведенного в сообщении об ошибке? Исполняемые файлы ELF мало чем отличаются от общих библиотек ELF; может быть, что ошибка в основном действительна, но поставляется с запутанным сообщением. –

ответ

0

Спасибо за все предложения!

Итак, оказывается, что это ошибка (или изменение) в выпуске Debian gcc, на котором основана Kali. Решение заключается в компиляции с -no-pie.