我正在尝试为Android创建一个监控应用程序作为项目的一部分。为此,我想使用strace,但我无法让Strace在Real Device上工作。
为了测试Strace,我最初尝试使用Adb使用以下代码启动Strace:
adb shell
root @mako:/#strace -p 9807
Strace正确启动但(据我所知)每当有任何用户输入进入应用程序时,它会提供以下输出,当Strace退出时,它跟踪的应用程序会自动重启:
clock_gettime(CLOCK_MONOTONIC,{68514,862578038})= 0
clock_gettime(CLOCK_MONOTONIC,{68514,862822201})= 0
clock_gettime(CLOCK_MONOTONIC,{68514,863035844})= 0
clock_gettime(CLOCK_MONOTONIC,{68514,863249487})= 0
clock_gettime(CLOCK_MONOTONIC,{68514,863463129})= 0
--- SIGSEGV {si_signo = SIGSEGV,si_code = SEGV_MAPERR,si_addr = 0xd} ---
sigaction(SIGSEGV,{SIG_DFL,[],SA_RESTART},{0xb520a3b9,[],SA_STACK | SA_SIGINFO},0)= 0
sigaction(SIGHUP,{0xb520a3b9,[],SA_STACK | SA_SIGINFO},NULL,0)= 0
prctl(PR_GET_NAME,0xb6fcbb6c,0,0,0)= 0
套接字(PF_LOCAL,SOCK_DGRAM | SOCK_CLOEXEC,0)= 31
fcntl64(31,F_SETFL,O_RDONLY | O_NONBLOCK)= 0
connect(31,{sa_family = AF_LOCAL,sun_path =" / dev / socket / logdw"},110)= 0
clock_gettime(CLOCK_REALTIME,{1420310998,749300862})= 0
writev(1,[{" \ 4",1},{" \ 365%",2},{" \ 3269 \ 250T~l \ 251,",8},{" \ 7",1},{" libc \ 0",5},{"致命信号1(? ?),代码1在" ...,59}],6)= 76
close(1)= 0
prctl(PR_GET_DUMPABLE)= 1
套接字(PF_LOCAL,SOCK_STREAM,0)= 1
connect(1,{sa_family = AF_LOCAL,sun_path = @" android:debuggerd"},20)= 0
写(1," \ 0 \ 0 \ 0 \ 0 \ 365%\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0&0",16)= 16
读(1,"",1)= 0
close(1)= 0
sigaction(SIGHUP,{SIG_DFL,[],SA_RESTART},{0xb520a3b9,[],SA_STACK | SA_SIGINFO},0)= 0
rt_sigreturn()= 1545157337
--- SIGSEGV {si_signo = SIGSEGV,si_code = SEGV_MAPERR,si_addr = 0xd} ---
+++被SIGSEGV +++杀死
当我在模拟器上尝试相同的操作时,它可以正常工作。
我的设备已植根,我相信我为adb提供了必要的权限(SuperSU要求授予SuperUser权限,而shell是root @mako)。我还下载了一个strace二进制文件,将其推送到设备并试图通过在应用程序中打开来跟踪它(通过尝试跟踪相同的应用程序Strace打开),但它也提供了类似的行为。
我尝试使用Usb Debugging和Eclipse打开并且没有Usb调试。当Eclipse打开时,在应用程序崩溃之前,Logcat会提供以下日志:
01-03 21:15:13.936:E /(11338):ptrace attach failed:不允许操作
这让我觉得它是一个权限问题,但它也让人感到困惑,因为strace在给出用户输入之前一直有效。
所以现在我很困惑为什么Strace不能在我的设备上运行。任何帮助或指向正确方向的指标都值得赞赏。
编辑:我使用的是Android 5.0.1,这可能也可能不是这里的问题,因为我在某处读到了由于安全性改进而导致Kitkat之后的ptrace出现问题,但我不确定这是否是问题。任何确认/解决方案都是完美的。
答案 0 :(得分:0)
我的nexus4运行cm-12.1时遇到了同样的错误。
adb shell
root@mako:/ # strace -p pid
...
something
...
+++ killed by SIGSEGV +++
主要是,当我尝试使用应用程序时。出现错误。
然后我尝试了另一个rom ,并且strace工作。 :)
可能你的strace与你的设备巧妙地不相容,或者像Chris Stratton所说的那样巧妙地破坏了。