如何为没有可写和可执行段的Android O编译.so?如何设置特定的ELF权限?

时间:2017-08-04 17:14:55

标签: android makefile android-ndk cmake elf

https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#Writable-and-Executable-Segments-Enforced-for-API-level-26

目前Android O预览版4由于具有可写和可执行段而阻止加载某些本机库。他们通过扫描ELF来确定这一点。

我正在尝试为没有可写和可执行段的Android编译本机共享对象库。

对这种类型的低级编译不太熟悉,有人可以解释如何设置段与可写和可执行权限相互排斥吗?

我想我可能需要在我的Android.mk文件中添加一些特定的标志来防止这个问题,其他初步想法可能与用于编译的NDK工具链有关。

对于在哪里寻找任何帮助或建议表示赞赏。

1 个答案:

答案 0 :(得分:3)

GNU工具链和Android工具链现在已经做了很长时间了。您可以在文章中使用readelf / grep命令:

$ readelf --program-headers -W libBadFlags.so | grep WE

如果没有输出,你应该没事。如果输出,则需要跟踪可写/可执行映射的来源。对于GNU_STACK标头,它可能是一个缺少注释的汇编程序文件(仅仅是疏忽)。但更为模糊的事情是可能的,因此没有通用的解决方案。

但在大多数情况下,不需要对项目进行任何更改。