【问题标题】:Android 4.2 - LD_PRELOAD supported or not?Android 4.2 - LD_PRELOAD 是否支持?
【发布时间】:2013-01-03 18:33:02
【问题描述】:

我想知道较新的 Android 版本现在是否支持 LD_PRELOAD?

在 4.0 ICS 时不是这样,并且在文档 (NDK docs/SYSTEM-ISSUES.html) 中仍然有:

No support for LD_LIBRARY_PATH, LD_PRELOAD, RTLD_LOCAL and many other options.

但几天前,我在我的 Android 4.2 Galaxy Nexus 上使用了 LD_LIBRARY_PATH,它工作了(!)。

提前致谢!

【问题讨论】:

  • 我记得让其中一个工作,但有人想知道你打算用它做什么 - 在正常的 Android 操作期间,exec() 并没有真正使用,所以没有太多机会这样的设置才有效果。如果您想确切了解,请检查源代码,在链接器二进制文件上运行字符串,或对其进行测试。
  • 我以前从未使用过 LD_PRELOAD,但不知道我是否可以在 android 中做这样的事情:linuxjournal.com/article/7795
  • 但是用它做什么呢?如果您正在处理正确的 Android 代码,您会将 jni 库加载到现有进程中,在这种情况下,您可以简单地先加载带有替换函数的库 - 尽管要注意大多数系统库都预先加载了很长时间在您编写的第一行代码运行之前。链接器预加载变量实际适用的情况是,如果您实际上正在执行二进制文件 - 在 unix 传统中比在 android 中操作更多。

标签: android android-ndk android-4.2-jelly-bean ld-preload


【解决方案1】:

虽然官方的 NDK-r9d 文档仍然这么说,但事实证明 LD_PRELOAD 确实适用于有根设备。 运行

adb shell
setprop wrap.com.xyz.yourapp LD_PRELOAD=/path/to/your/library.so
stop
start

将库推送到设备后。 我在 ANDROID-19 模拟器上成功尝试了它以提供函数的替代定义。

查看此链接 - http://cedricvb.be/post/intercepting-android-native-library-calls/

【讨论】:

  • 对我来说太晚了,但绝对是一个很好的提示并且非常有趣:)
  • 很棒的答案。虽然有一个问题,属性值不能超过 91 个字符...所以您需要确保 path/to/your/library.so 很短(特别是如果您需要多个库)。
【解决方案2】:

一般来说,LD_LIBRARY_PATH 从事工程构建(也就是根设备)已经有一段时间了。问题是这对生产构建没有帮助 - 不是因为加载程序发生了变化,而是因为您的应用程序的环境是安全的。

【讨论】:

  • 嗯,是的,我的设备是有根的。这是否也意味着,我可以假设“所有”路由设备上都存在 LD_LIBRARY_PATH(或更好的 LD_PRELOAD)?我已经接受了,我的应用程序需要有根设备(遗憾的是)。因为我已经很难过 - 我什至不知道 LD_PRELOAD 是否会工作,我是新手。
  • 查看 AOSP bionic/linker/linker.c,LD_PRELOAD 未解析。这同样证明了您可以假设对LD_LIBRARY_PATH 的更改将受到所有根设备上的加载程序的尊重。请参阅 groups.google.com/forum/?fromgroups=#!topic/android-ndk/…groups.google.com/forum/?fromgroups=#!topic/android-ndk/…。本质上,LD_LIBRARY_PATH 在加载程序(或进程,如果你关心的话)启动时被解析,只能在有根设备上控制。
  • 感谢您的回复,这很有帮助。现在,我得看看我能不能用这个做点什么:)
  • 你需要达到什么目标?
  • 我想捕获传出的音频并将其流式传输到远程扬声器。但总的来说,我想了解android是如何工作的。今天晚上,我发现了一些关于 libaudio.so 的东西:stackoverflow.com/questions/14430045/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 2010-12-16
  • 2015-01-03
  • 2018-03-26
  • 2016-12-15
相关资源
最近更新 更多