一、问题描述
使用 NDK 编译程序,编译过程正常, adb push 到 android 运行时,出现此问题。
root@XXX_Device:/data/test # ./test
error: only position independent executables (PIE) are supported.
root@XXX_Device:/data/test #
二、问题分析
此问题与 android 版本升级,相关安全检测机制更新相关;
从 Android 4.1 开始引入 PIE 安全机制,并且从 Android 5.0 正式开启验证,非PIE方式编译的可执行程序无法运行。
三、解决方案
1. 编译语句添加pie选项解决
在 编译选项中,添加
-pie -fPIE即可;
最简单的例子:
arm-linux-androideabi-gcc -pie -fPIE test.c -o output/test
2. 想办法绕过检测(此处不详述)
—— 2018-12-07 ——
本文针对Android设备上出现的only position-independent executables (PIE) are supported错误,详细解析了该问题的原因,源于Android4.1引入并从5.0开始强制执行的PIE安全机制。文章提供了两种解决方案:一是通过在编译语句中添加-pie和-fPIE选项进行修正,二是提及了包括修改源码和可执行程序头在内的绕过检测方法。
1030





