2017-02-21 73 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编译。