如何修复"不允许W + E加载段"在Android O(8.0)

时间:2017-10-11 01:16:10

标签: android c++

在Android 8.0,My App的targetSdkVersion = 22中,我在调试时收到以下警告日志:

  

W / linker:" / data / app / my_package_name-ndPicG9hxEo009BA_zqNQw == / lib / arm / libxxx.so":不允许W + E加载段

我已经解决了"文本重定位"对于之前的.so文件,如果targetSdkVersion为26,则该应用程序将收到错误。我知道上述问题的原因,但我不知道如何修复此错误。

日志的源代码(bionic / linker / linker_phdr.cpp):

if ((prot & (PROT_EXEC | PROT_WRITE)) == (PROT_EXEC | PROT_WRITE)) {
    // W + E PT_LOAD segments are not allowed in O.
    if (get_application_target_sdk_version() >= __ANDROID_API_O__) {
      DL_ERR_AND_LOG("\"%s\": W + E load segments are not allowed", name_.c_str());
      return false;
    }
    DL_WARN("\"%s\": W + E load segments are not allowed", name_.c_str());
    add_dlwarning(name_.c_str(), "W+E load segments");
  }

所以关键是PROT_EXEC和PROT_WRITE权限。但是如何禁止这些许可呢?我需要你的帮助,谢谢!

0 个答案:

没有答案