GCC中可执行文件的非GOT样式重定位

时间:2017-04-18 07:20:02

标签: gcc linker

在GCC中,如果我将某些内容编译到带有g++ -shared func.cpp -o libfunc.so -fPIC的GCC的共享库中,则对此全局符号的内部函数调用将在此生成的共享库文件中通过GOT。但是如果我使用g++ func.cpp -o libfunc.so -mcmodel=large进行编译,它将不会生成GOT,而是通过直接修补R_X86_64_64样式重定位来重新定位。

我也希望这种行为适用于可执行文件。如果我使用g++ main.cpp libfunc.so -o a.out编译可执行文件,GCC将为从main.cpplibfunc.so中定义的任何函数调用生成GOT。我不想要这种行为。我想要R_X86_64_64样式重定位。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

由于安全性原因,现代发行版中的可执行文件默认情况下使用-fPIE进行编译。要恢复旧的行为,请将-no-pie添加到CFLAGS / CXXFLAGS