【问题标题】:How to set the absolute path of .so files?如何设置.so文件的绝对路径?
【发布时间】:2017-08-01 10:26:42
【问题描述】:

我正在使用 System.loadLibrary("xyz") 加载 JNI 库,它工作正常。但问题是,当使用java.lang.System.load() 加载库时,如果动态库的完整路径指定在全球可读的位置,攻击者可以用恶意文件替换或修改原始文件 (例如 SDCard)。这可能会导致将不受信任的内容加载到 Dalvik VM 中。

因此,可以使用目标库的完全限定路径来解决此问题。由于某种原因,我无法成功提供完全合格的路径。

以下是我尝试过但没有运气的事情。

System.load ("xyz")

System.load ("/src/main/jni/lib/xyz")

System.load ("/system/lib/xyz")

有人可以建议我哪里出错了。

【问题讨论】:

  • 确保提供库的全名。我猜你的 xyz 实际上是 libxyz.so
  • @mko 是的。它有.so。
  • 这一行应该可以解决问题:System.load ("/some_loction/lib/libxyz.so") 假设您有访问权限。
  • '不走运'不是问题描述。您需要提供准确的错误消息和堆栈跟踪。但是src 目录在运行时不会存在,并且运行时部署目录不会与您在开发系统中的项目位置相同。

标签: java android java-native-interface loadlibrary


【解决方案1】:

您需要在 gradle 文件中设置“jniLibs.srcDirs”。

类似:

main {
       ...
       jniLibs.srcDirs 'lib'
}

【讨论】:

    【解决方案2】:

    我和你有同样的问题。 在 java.library.path(位于 /data/data/com.xxx.yyy/lib/[abi])中加载 lib 时,System.loadLibrary 可以。 但是当从绝对路径加载一个库时,我们应该使用System.load。例如:

    System.load("/data/data/com.xxx.yyy/files/xxx/libxyz.so")
    

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 1970-01-01
      • 2020-06-04
      • 2015-06-07
      • 2021-10-29
      • 2016-06-29
      • 2021-10-18
      • 1970-01-01
      • 2013-03-07
      相关资源
      最近更新 更多