2013-02-20 68 views
3

我很驚訝地發現gcc強制代碼獨立於位置,即使這樣的標誌沒有在命令行中明確提供。我懷疑它可能與Android的動態加載器的某些期望有關(例如對重定位類型的期望以及隨意放置代碼的自由),但我不確定。爲什麼arm-linux-androideabi-gcc強制使用-fpic?

任何人都可以解釋爲什麼這是真的嗎?

$ 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開始,谷歌正在迫使全ASLR克服常見的安全漏洞,請參閱this article瞭解更多詳情。

這個工作需要位置獨立代碼(PIC),但也是PIE(位置獨立可執行)。

相關問題