2017-08-04 26 views
2

https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#Writable-and-Executable-Segments-Enforced-for-API-level-26如何在沒有可寫和可執行段的情況下編譯.so for Android O?如何設置特定的ELF權限?

由於具有可寫段和可執行段,當前Android O Preview 4阻止某些本地庫的加載。他們通過掃描ELF來確定這一點。

我想編譯一個本地共享對象庫的Android沒有這樣的可寫和可執行段。

對於這種低級別的編譯說話不太熟悉,有人可以解釋如何將段設置爲與可寫和可執行權限相互排斥嗎?

我想我可能需要添加一些特定的標誌到我的Android.mk文件,以防止這個問題,與其他初步的想法,這可能是與用於編譯的NDK工具鏈有關。

任何有關在哪裏看的幫助或建議表示讚賞。

回答

3

GNU工具鏈和Android工具鏈已經在很長很長一段時間裏做了正確的事情。您可以在文章中使用readelf/grep命令:

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

如果沒有輸出,你應該罰款。如果輸出,則需要跟蹤可寫入/可執行映射的來源。對於GNU_STACK頭文件,它可能是一個缺少註釋的彙編程序文件(僅僅是一個疏漏)。但更晦澀的事情是可能的,所以沒有通用的解決方案。

但在大多數情況下,不需要更改您的項目。

+0

感謝您的回答Florian,您發佈的命令將正確顯示共享對象文件是否具有可寫和可執行段。但是我發現NDK編譯W + E段的原因實際上是由於我的第三方混淆工具插入了這些段。正確配置混淆和後編譯完成工具還可以幫助防止.so文件擁有W + E段。 – DanielG

相關問題