仍然LD_PRELOAD适用于android 6.0

时间:2018-04-20 03:27:58

标签: android system native

我尝试在Android上的How to wrap a system call (libc function) in Linux上学习教程。它正在使用Ubuntu 16.04,但是当我在Android上试用它时它无法正常工作。

以下是我的步骤:

  • 将库推送到设备。

    adb push libpreload.so /data/libpreload.so
    
  • 在Android终端上设置系统属性:

    setprop com.foo.bar LD_PRELOAD=/data/libpreload.so
    

我使用strace跟踪Android设备上的所有系统调用。我没有收到消息:

"write(0, "Hello, Kernel!\n", 15Hello, Kernel!)        = 15"

我错过了什么吗? Ld_preload是否适用于Android 6.0?

2 个答案:

答案 0 :(得分:0)

您的setprop来电不正确。您需要设置目标包的wrap属性:

setprop wrap.com.foo.bar LD_PRELOAD=/data/libpreload.so

还要确保该库可读且可执行:adb shell chmod a+rx /data/libpreload.so

答案 1 :(得分:0)

回答这个问题,因为缺少一些信息,如果人们找到这个问题,这可能是有益的。

是的,它适用于Android 6。 除了上面答案中提到的命令错误外,在Android 6 SELinux上还会阻止共享库。您必须将其设置为宽松模式才能正常工作。为此,您很可能需要在手机上 root 访问。

启用:

  1. adb shell
  2. su
  3. setenforce 0
  4. 使用getenforce进行验证,将其设置为Permissive

禁用:

  1. adb shell
  2. su
  3. setenforce 1
  4. 使用getenforce进行验证,将其设置为Enforcing