3

そのようなフラグがコマンドラインで明示的に提供されていなくても、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
4

1 に答える 1

5

Android 4.1 以降、Google は、一般的なセキュリティ エクスプロイトを克服するために完全なASLRを強制しています。詳細については、この記事を参照してください。

これが機能するには、位置独立コード (PIC) が必要ですが、PIE (位置独立実行可能ファイル) も必要です。

于 2013-02-24T12:32:55.650 に答える