我很惊讶地发现 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
从Android 4.1开始,谷歌正在强制全面ASLR要克服常见的安全漏洞,请参阅本文更多细节。
要实现此功能,需要位置无关代码 (PIC),还需要 PIE(位置无关可执行文件)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)