代码之家  ›  专栏  ›  技术社区  ›  fons

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

  •  3
  • fons  · 技术社区  · 13 年前

    我惊讶地发现,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 回复  |  直到 13 年前
        1
  •  5
  •   ismail    13 年前

    从Android 4.1开始,谷歌正在强制 ASLR 要克服常见的安全漏洞,请参阅 this article 了解更多详细信息。

    这需要独立于职位的代码(PIC),也需要独立于岗位的可执行文件(PIE)。