2017-02-21 71 views
2

我想在編譯的Linux卡利一個C可執行文件:https://www.exploit-db.com/exploits/17787/使用GCC編譯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所基於的gcc的Debian版本中的一個錯誤(或更改)。解決方案是用-no-pie編譯。