源地址:https://www.ctvol.com/asreverse/8383.html
在高版本android中ndk-build C文件的时候在真机上运行的时候,会出现下面的情况。我们应该怎么去避免这种情况,在网上找了很多方法基本不行,有幸看到一篇文章的结合起来即可:
root@hamhead:/data/local/tmp # ./maopao
./maopao
error: only position independent executables (PIE) are supported.
这个主要是Android5.0以上的编译选项默认开启了pie,在5.0以下编译的原生应用不能运行,会出现 error: only position independent executables (PIE) are supported提示;
解决方法:
1、使用安卓5.0以下的系统来进行安装执行
#一般的安卓目录:/data/local/tmp
#adb shell 切换真机操作:
#su超级权限;
#chmod 777 xxx修改文件权限
2、用IDA6.6+版本即可
3、使用WinHex.v18.7-SR2.x64 (密码:e7zl)打开生成的elf文件,然后从头数到第17个字符,一般默认是02,修改成03即可;
注意:第三种方法如果还出现问题话,需要在Android.mk文件中加上
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPI
重新ndk-build之后,将字符修改掉,然后adb push到手机上即可;