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 工具链有关。
任何关于哪里看的帮助或建议,不胜感激。
GNU工具链和Android工具链已经做了很长时间的正确事情。 您可以使用文章中的readelf
/grep
命令:
$ readelf --program-headers -W libBadFlags.so | grep WE
如果没有输出,你应该没问题。如果有输出,则需要跟踪可写/可执行映射的来源。 对于GNU_STACK
标头,它很可能是一个缺少注释的汇编程序文件(仅仅是疏忽(。 但是更晦涩的事情是可能的,所以没有通用的解决方案。
但在大多数情况下,不需要对项目进行任何更改。