在高版本android中ndk-build C文件的时候在真机上运行的时候,会出现下面的情况。我们应该怎么去避免这种情况,在网上找了很多方法基本不行,有幸看到一篇文章的结合起来即可:
root@hamhead:/data/local/tmp # ./maopao
./maopao
error: only position independent executables (PIE) are supported.
![pie](https://www.ctvol.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
这个主要是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即可;
![winhex修改](https://www.ctvol.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
注意:第三种方法如果还出现问题话,需要在Android.mk文件中加上
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPI
重新ndk-build之后,将字符修改掉,然后adb push到手机上即可;
![运行成功](https://www.ctvol.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
该文章属于:计算机技术网原创
转载请注明标题:高版本android运行elf文件出错 error: only position independent executables (PIE) are supported-计算机技术网
转载请注明出处:https://www.ctvol.com/asreverse/8383.html