2017-02-21 8 views
2

:これが起こって、または、なぜそれは私が共有オブジェクトをコンパイルしようとしていると考えている理由https://www.exploit-db.com/exploits/17787/GCCでCファイルをコンパイルするとエラーが発生しますか?私はカーリーLinux上でCの実行ファイルをコンパイルしようとしている

# 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

ありがとうございました!

これは、KaliのDebianリリースのgccのバグ(または変更)であることが判明しました。解決策は、-no-pieでコンパイルすることです。

関連する問題