2013-02-20 3 views
3

Я был удивлен, увидев, что gcc наводит код на независимость от положения, даже если такой флаг явно не указан в командной строке.Почему arm-linux-androideabi-gcc использует -fpic?

Я подозреваю, что это может быть связано с определенными ожиданиями от динамического загрузчика 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 

ответ

5

Начиная с Android 4.1, Google форсирует полный ASLR, чтобы преодолеть общие подвиги безопасности см this article для более подробной информации.

Для этого требуется положение независимого кода (PIC), но также и PIE (Position Independent Executable).

Смежные вопросы