我尝试在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?
答案 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 访问。
adb shell
su
setenforce 0
getenforce
进行验证,将其设置为Permissive
adb shell
su
setenforce 1
getenforce
进行验证,将其设置为Enforcing