利用strace工具获取Android应用的系统调用序列

项目需要获取android应用运行时的系统调用。之前想要通过编译内核来达成目标,但是太难了。在阅读文献中发现很多都是利用strace工具进行追踪系统调用的,因此想要尝试一下看是否成功。

准备

1.下载Android SDK Platform-Tools,获取adb.exe
下载地址:https://www.androiddevtools.cn/
利用strace工具获取Android应用的系统调用序列_第1张图片
2.配置adb(Android Debug Bridge)环境变量(下图为我的adb所在目录)。
利用strace工具获取Android应用的系统调用序列_第2张图片
配置成功后,打开命令提示符输入adb,如下:
在这里插入图片描述
3.安装VirtualBox,在VirtualBox中安装Android-x86-5.1,参照博客
https://www.cnblogs.com/wynn0123/p/6288344.html
其中,Android-x86-5.1-rc1.iso下载推荐
http://sourceforge.net/projects/android-x86/files/Release 5.1/利用strace工具获取Android应用的系统调用序列_第3张图片
4.查看虚拟机的IP地址并配置其网络端口的转发参数以及使用adb进行连接,可以参照博客 https://blog.csdn.net/listener_ri/article/details/45922539

实战:以Android-x86-5.1中自带的浏览器为例,使用adb、strace工具获取其系统调用。
利用strace工具获取Android应用的系统调用序列_第4张图片
1.打开虚拟机后,打开主机的命令提示符,利用adb命令与虚拟机连接。
连接命令: adb connect 主机IP
检测是否连接成功(已连接设备):adb devices
成功连接会如下图
利用strace工具获取Android应用的系统调用序列_第5张图片
若使用adb devices 命令后总显示offline,如下图:
利用strace工具获取Android应用的系统调用序列_第6张图片
可以尝试在命令提示符中输入:adb kill-server命令重新进行连接。

2.获取浏览器的进程号
键入adb shell,进入虚拟机的终端:
在这里插入图片描述
在虚拟机中打开浏览器,之后使用su命令进入root权限,再使用ps命令查看所有进程
利用strace工具获取Android应用的系统调用序列_第7张图片
找到浏览器的进程号,我的这个进程为2545,父进程为1046
利用strace工具获取Android应用的系统调用序列_第8张图片
得到进程号后,在B中利用strace命令追踪器系统调用。
由于,我需要得到的是系统调用的时间序列,所以这里我使用的命令是:

strace -T -tt -e trace=all -p 2545(这里进程号)

其中 -T 和 -tt 的参数含义分别为:

-T 会显示系统调用执行的时间间隔
-tt 会显示系统调用执行的时刻
利用strace工具获取Android应用的系统调用序列_第9张图片
strace 命令具体使用细则参考
https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

利用strace工具获取Android应用的系统调用序列_第10张图片
于此,我们就得到了系统调用序列。

其实使用adb只是为了可以在PC端上操作Android虚拟机,也可以不用adb工具,直接在Android虚拟机中的终端模拟器中进行操作也是可行的。

你可能感兴趣的:(Android)