如何在Android应用程序中使用strace

我想使用strace监视我的应用程序的系统调用。我在模拟器Pixel 3 XL API29上运行我的应用程序,当我在PC上使用adb shell执行“ su”和“ strace”命令时,一切正常。但是我想在应用程序中执行监视工作,以便可以在不连接PC上adb的情况下在真实设备上对其进行测试。 因此,我的目标是拥有两个应用程序,一个是普通应用程序,另一个是使用strace的监视器应用程序。我是Android新手,曾经考虑过几种方法,但不知道它们是否可以解决,因此我需要一些建议。 1.是否可以在Java语言中使用“ su”和“ strace”命令?当我使用Runtime.getRuntime()。exec(cmd)时,它无法工作。代码为:

Process p=Runtime.getRuntime().exec("su");
DataOutputStream dos = new DataOutputStream(p.getOutputStream());
            dos.writeBytes("strace -f -tt -p pidnumber\n");
            dos.writeBytes("exit\n");
            dos.flush();
            dos.close();
            p.waitFor();

请注意,当我使用adb shell时,可以直接执行“ su”。我在/ system / xbin中选中“ su”,它是“ -rwsr-x ---”,似乎其他人没有执行权限。因此,我尝试更改其权限:

adb root 
adb remount
failed:/system/bin/remount exited with status 7
mount -o rw,remount /system
failed: mount: '/system' not in /proc/mounts

我不知道什么是错误的,或者根本不可能在Java中运行“ su”。

  1. 由于adb具有使用strace的功能,是否可以提取该功能并将其放入我的监视器应用程序中?也许像建立一个lib或只是向adb shell中的特定App授予权限?

  2. Android官方网站上有一个有关使用strace https://source.android.com/devices/tech/debug/strace的页面,但是它太粗糙了,我不知道从哪里开始。看来我必须先编译Strace模块

mmma -j6 external/strace

这意味着我必须下载所有源代码并执行命令,然后才能在Application中使用strace?

  1. 另一个猜测:是否可以在C中调用strace并在应用程序中使用JNI来获取所有系统调用?但是我认为这可能会在方法1中遇到同样的问题,即无法运行“ su”。

之前也有类似的问题,但是它们太老了,无法解决我的情况。

Android app for strace

'strace' in android

How to use strace on Android?

我已经有了strace命令,可以在adb shell中使用它,也许与此类似,但是还没有答案。

How to call Strace native library in Android application?

总而言之,我的问题是,是否可以在Andriod应用程序中使用strace,如果可以,我该怎么做?另外,关于以上四种方法的可行性的任何建议都将有所帮助。我期待任何可能有效的方法,并提前致谢。

tyh012 回答:如何在Android应用程序中使用strace

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2786900.html

大家都在问