2016-06-23 14 views
0

我已经编写了一个android应用程序来监视正在运行的进程的系统调用,但是我得到的所有内容是“Operation not permitted ”。我试图禁用SElinux并使用“chmod 4777 strace”和chown“root:root strace”来启用strace上的root访问权限,但我仍然无法解决问题。该应用程序在仿真器4.3(API 18)上运行。“strace -p pid”给出了“attach:ptrace(PTRACE_ATTACH,...):不允许的操作”

回答

1

进程可以禁用跟踪,即使作为root用户也无法附加方法。

如果目标进程无法从strace接收信号(如果以超级用户身份运行,这被排除,尽管我不确定strace实际上是否处理好东西),EPERM可以被触发,目标进程本身是setuid禁用跟踪),以及跟踪是否仅由进程本身禁用。另外,一个进程最多可以跟踪一个调试器。

不可拖动的流程不能通过strace连接。一个进程可以将自己设置为不可拖动,并且它也会自动发生在UID更改(由于setuid位或setuid系统调用)

+0

感谢您的解释。我注意到,当从android应用程序运行“Strace cat”文件“-o/path”时,在“file”上跟踪“cat”的输出将根据指定的路径生成一个文件。但是,通过“Strace -p(PID zygote进程)-f -o/path我得到一个空文件,知道我试图分叉随机应用程序,希望从与这些应用程序关联的新生成的子进程中获取系统调用(Zygote是所有的Android应用程序进程的父母) –

+0

我试图直接strace一个子进程没有追查zygote,但徒劳无功,我遇到了同样的问题。你有什么建议吗?我在一个论坛上的某个地方看到我不记得名字,有可能修改内核以便进行跟踪Currenlty我正在使用API​​ 15. –

+0

为了修改内核,你需要一个有根的设备(我想你已经拥有了它)。API就是内核之上的东西所以它实际上是irelevant。替换内核不是应用程序可以做的 –

0

在某些情况下,在Android上执行strace会失败,并显示“ptrace(PTRACE_ATTACH,...) :操作不允许“,因为strace已经在运行Android

$ adb shell su -c ps | grep的strace的 根15861 1 1056 4 do_wait 00000452cc小号

一旦旧的运行strace的进程被终止,新的调用可能会成功:

$ ADB壳苏-c pkill的strace的