在真实 Android 设备上运行 Strace 会给出 SIGSEGV
Running Strace on Real Android Device gives SIGSEGV
我正在尝试为 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
socket(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, [{"", 1}, {"5%", 2}, {"690T~l1,", 8}, {"", 1}, {"libc[=12=]", 5}, {"Fatal signal 1 (???), code 1 in "..., 59}], 6) = 76
close(1) = 0
prctl(PR_GET_DUMPABLE) = 1
socket(PF_LOCAL, SOCK_STREAM, 0) = 1
connect(1, {sa_family=AF_LOCAL, sun_path=@"android:debuggerd"}, 20) = 0
write(1, "[=12=][=12=][=12=][=12=]5%[=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=]", 16) = 16
read(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} ---
+++ killed by SIGSEGV +++
当我在模拟器上尝试同样的事情时,它工作正常。
我的设备已获得 root 权限,我相信我已授予 adb 必要的权限(SuperSU 要求授予超级用户权限,shell 是 root@mako)。我还下载了一个 strace 二进制文件,将其推送到设备并尝试通过在应用程序中打开来跟踪它(通过尝试跟踪打开 Strace 的同一个应用程序),但它也给出了类似的行为。
我在启用 USB 调试和打开 Eclipse 的情况下尝试了此操作,但没有进行 USB 调试。当 Eclipse 打开时,在应用程序崩溃之前 Logcat 给出以下日志:
01-03 21:15:13.936: E/(11338): ptrace attach failed: Operation not permitted
这让我认为这是一个权限问题,但它也令人困惑,因为 strace 在给出用户输入之前一直有效。
所以现在我很困惑为什么 Strace 不能在我的设备上运行。感谢任何帮助或指向正确方向的指示。
编辑:我正在使用 Android 5.0.1,这在这里可能也可能不是问题,因为我在某处读到由于安全改进,Kitkat 之后 ptrace 存在一些问题,但我又一次我不确定这是否是问题所在。任何确认/解决方案都是完美的。
我的 nexus4 出现了同样的错误 运行 cm-12.1。
adb shell
root@mako:/ # strace -p pid
...
something
...
+++ killed by SIGSEGV +++
大多数情况下,当我尝试使用被跟踪的应用程序时。出现错误。
然后我尝试了 另一个 rom,strace 成功了。 :)
可能您的 strace 与您的设备有轻微的不兼容,或者正如 Chris Stratton 所说的那样有轻微的损坏。
我正在尝试为 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
socket(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, [{"", 1}, {"5%", 2}, {"690T~l1,", 8}, {"", 1}, {"libc[=12=]", 5}, {"Fatal signal 1 (???), code 1 in "..., 59}], 6) = 76
close(1) = 0
prctl(PR_GET_DUMPABLE) = 1
socket(PF_LOCAL, SOCK_STREAM, 0) = 1
connect(1, {sa_family=AF_LOCAL, sun_path=@"android:debuggerd"}, 20) = 0
write(1, "[=12=][=12=][=12=][=12=]5%[=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=]", 16) = 16
read(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} ---
+++ killed by SIGSEGV +++
当我在模拟器上尝试同样的事情时,它工作正常。
我的设备已获得 root 权限,我相信我已授予 adb 必要的权限(SuperSU 要求授予超级用户权限,shell 是 root@mako)。我还下载了一个 strace 二进制文件,将其推送到设备并尝试通过在应用程序中打开来跟踪它(通过尝试跟踪打开 Strace 的同一个应用程序),但它也给出了类似的行为。
我在启用 USB 调试和打开 Eclipse 的情况下尝试了此操作,但没有进行 USB 调试。当 Eclipse 打开时,在应用程序崩溃之前 Logcat 给出以下日志:
01-03 21:15:13.936: E/(11338): ptrace attach failed: Operation not permitted
这让我认为这是一个权限问题,但它也令人困惑,因为 strace 在给出用户输入之前一直有效。
所以现在我很困惑为什么 Strace 不能在我的设备上运行。感谢任何帮助或指向正确方向的指示。
编辑:我正在使用 Android 5.0.1,这在这里可能也可能不是问题,因为我在某处读到由于安全改进,Kitkat 之后 ptrace 存在一些问题,但我又一次我不确定这是否是问题所在。任何确认/解决方案都是完美的。
我的 nexus4 出现了同样的错误 运行 cm-12.1。
adb shell
root@mako:/ # strace -p pid
...
something
...
+++ killed by SIGSEGV +++
大多数情况下,当我尝试使用被跟踪的应用程序时。出现错误。
然后我尝试了 另一个 rom,strace 成功了。 :)
可能您的 strace 与您的设备有轻微的不兼容,或者正如 Chris Stratton 所说的那样有轻微的损坏。