为什么ARM-Linux的androideabi-gcc的执行-fpic?(Why does arm

2019-07-20 06:22发布

我很惊讶地看到,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

Answer 1:

与Android 4.1开始,谷歌正在迫使全ASLR克服常见的安全漏洞,请参阅本文的更多细节。

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



文章来源: Why does arm-linux-androideabi-gcc enforce -fpic?