为什么arm-linux-androideabi-gcc强制执行-fpic?

时间:2013-02-20 21:40:48

标签: android gcc cross-compiling

我很惊讶地发现gcc强制代码与位置无关,即使命令行中没有明确提供这样的标志。

我怀疑它可能与Android动态加载器的某些期望有关(例如对重定位类型的期望以及将代码放在任何地方的自由)但我不确定。

有人可以解释为什么会这样吗?

$ arm-linux-androideabi-gcc --version | grep GCC
arm-linux-androideabi-gcc (GCC) 4.4.3

$ arm-linux-androideabi-gcc -v -S main.c |& grep fpic
 /home1/local64/android-toolchain/bin/../libexec/gcc/arm-linux-androideabi/4.4.3/cc1 -quiet -v -iprefix /home1/local64/android-toolchain/bin/../lib/gcc/arm-linux-androideabi/4.4.3/ -isysroot /home1/local64/android-toolchain/bin/../sysroot main.c -mbionic -fpic -quiet -dumpbase main.c -march=armv5te -mfloat-abi=soft -mfpu=vfp -auxbase main -version -o main.s

1 个答案:

答案 0 :(得分:5)

从Android 4.1开始,Google强制完全ASLR克服常见安全漏洞,有关详细信息,请参阅this article

位置无关代码(PIC)需要工作,但也需要PIE(位置无关可执行文件)。