2

我有以下情况,我想监控 Android 手机上的系统调用,所以我编写了一个脚本来做到这一点。使用 Android Emulator 可以完美运行(在我的 Ubuntu 上的特定文件中写入应用程序的痕迹)。问题是当我附加一个真实的手机来分析它时,它在结果文件中显示以下内容:

ptrace attach failed: Operation not permitted

我正在使用此代码来获取它,但我不明白为什么它可以在模拟器上运行,而不是在有根的真实设备中运行。

这是我在 perl 中使用的命令:

system("$dirTools/adb -s $Device shell strace -p $PID[1]>$dirRecordDataSet/$Date/$appName &");

有什么建议吗?提前致谢

4

2 回答 2

1

可以是 adb 守护程序以有限的权限运行。您可以尝试使用 setuid roo 安装 strace。这是有关它的联机帮助页建议:

安装程序

如果 strace 安装了 setuid 到 root,那么调用用户将能够附加到并跟踪任何用户拥有的进程。此外,setuid 和 setgid 程序将以正确的有效权限执行和跟踪。由于只有受信任的具有完全 root 权限的用户才应该被允许执行这些操作,所以只有当可以执行它的用户仅限于具有此信任的用户时,将 strace 作为 setuid 安装到 root 才有意义。例如,使用模式“rwsr-xr--”、用户 root 和组跟踪安装特殊版本的 strace 是有意义的,其中跟踪组的成员是受信任的用户。如果你确实使用了这个功能,请记得安装一个非setuid版本的strace,供普通luser使用。

于 2011-03-01T14:55:14.177 回答
0

您可以按照此问题Android emulator的答案安装您的 APK 文件。安装后,

转到 Eclipse,DDMS从 Windows 打开视图 => 打开透视图。

转到File Browser选项卡,单击任何文件夹,然后单击“将文件推送到设备”。您可以在此处上传任何空的 trace.txt 文件。我建议您将文件放在 sdcard 文件夹中。

转到上面链接中给出的 CMD。键入adb shell。通过键入 转到 sdcard cd sdcard

现在ps在命令行上输入并通过包名找出 APK 文件的 PID。

现在键入strace -p <pid> -o trace.txt. 所有系统调用都将放在这个文件中。当您想要完成对 APK 的跟踪时,可以将此 trace.txt 文件下载到您的计算机上并查看跟踪。

于 2012-12-15T11:01:48.327 回答