在Real Android Device上运行Strace会产生SIGSEGV

时间:2015-01-03 19:21:40

标签: android android-emulator adb sigsegv strace

我正在尝试为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出现问题,但我不确定这是否是问题。任何确认/解决方案都是完美的。

1 个答案:

答案 0 :(得分:0)

我的nexus4运行cm-12.1时遇到了同样的错误。

adb shell
root@mako:/ # strace -p pid
...
something
...
+++ killed by SIGSEGV +++

主要是,当我尝试使用应用程序时。出现错误。

然后我尝试了另一个rom ,并且strace工作。 :)

可能你的strace与你的设备巧妙地不相容,或者像Chris Stratton所说的那样巧妙地破坏了。