通过strace和monkey测试安卓应用的系统调用

配置adb

1.    下载android studio

2.    增加系统变量https://blog.csdn.net/lxzmmd/article/details/50455671

 

配置x86安卓虚拟机

1.    http://www.noobyard.com/article/p-mbalbjvk-bw.html

2. 通过ip地址连接虚拟机(为了保证虚拟机能上网,并且可以被实体机连接)https://blog.csdn.net/listener_ri/article/details/45922539

 

Monkey的使用

http://www.noobyard.com/article/p-uiegazko-cv.html

 

strace的使用

https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

 

strace在android中的使用:

linux上,strace一般有两种用法:

1. strace <elf_file>    启动程序的同时,用strace跟踪;

2. strace -p pid    对于已经启动的程序,通过-p参数可以attach上去跟踪之后的执行流程;

android上使用strace有一点特殊,android上所有android application都是通过zygote fork出来的,所有android application进程的父亲都是zygote。strace不能用来跟踪androidapplication,而是跟踪zygote和它的儿子。做法是先得到zygote的pid,再执行strace -f -p <pid_of_zygote>,然后启动要跟踪调试的程序;其中-f 代表跟踪子进程;而且是之后生成的子进程,之前已经运行起来的android application不会被跟踪到;


测试过程:

1. 打开虚拟机

2. 打开一个终端A连接虚拟机

adb connect 127.0.0.1//连接

adb devices//查看连接的安卓虚拟机

3.   终端A进入安卓apk的文件夹

4.   打开另一个终端B进入虚拟机的命令行界面

adb shell

su 获得超级用户权限

5. 通过终端A安装一个应用

例如:adb install u-an.osintsev.usaeurocoins.apk


6.  找到这个应用 并打开


7.   通过终端B查看这个应用的包名和父进程是64位还是32位的zygote 以及zygote pid。

输入ps 

它的包名是an.osintsev.usaeurocoins 父亲进程是1033

然后一定要关闭这个程序。


8.   终端B输入strace –c –f –e trace=all –p 1033。跟踪父进程。


9.    终端A启动monkey。adb shell monkey –p an.osintsev.usaeurocoins2000 //2000是模拟次数等待模拟结束,关闭程序。

10.    在终端B上按下control+c,得出结果