文字版,图文版就访问原始链接吧。
void usage(void) {
printf(“原创文章,欢迎转载和引用,不过请附上原始链接(
http://gikir.com/blog/?p=115 )和本申明,否则嘛,哼哼…\n”);
}
本篇文章我们将介绍如何使用gikdbg.art调试so动态库, 此处我们以$(GIKDBG.ART)/artsample/apk/gikdebugee.apk为例进行Step by step的操作与解释以及一些注意事项的说明。
Step 0.前置说明
手机端:Android模拟器,Android 4.4.2 ART 运行时;(真机与DVM运行时是一样的)
PC端:ParallelDesktop虚拟机,Windows 8.0,gikdbg.art v1.0.build140601.3;
PS:非root环境的设备由于权限的原因会有很多问题,不推荐使用!
Step 1.连接设备
运行模拟器,打开gikdbg.art.exe,执行/ART Debug/Device菜单,我们就可以来到如下界面:
0-logindevice
如果模拟器已经运行了,但是设备列表中没有,则等待一段时间后执行右键的Refresh菜单。然后双击或者右键Login就可以登陆选中的设备了。
对于第一次Login该设备,会询问你是否上传依赖的文件到/data/local,这一步如果否定了的话将不能使用调试功能。上传文件这个步骤目前已知的问题是对于非root的设备,往往因为权限的原因上传不成功,一般情况下/data/local/tmp目录没有问题,但是有些设备又没有/data/local/tmp目录,因此我们只有设置/data/local为目标路径,这个问题目前还不知道好的解决办法。归纳一下就是:
非root的机器无法在其/data/local下创建我们依赖的文件夹以及上传文件,如果我们将其迁移至/data/local/tmp这个目录下,又有部分设备没有这个文件夹,就更没有办法上传了。
对于这类上传失败的同学,可以想办法手工将$(GIKDBG.ART)/adb/android/gdb传至/data/local/gikir_android-xxxx/gdb这个位置,其中xxxx是GUID。
如果还没有安装该apk文件的,则可以在ADB Shell中执行$install –r命令选择gikdebugee.apk进行安装.
Step 2.选择进程
登陆成功后执行,确保模拟器的gikdebugee.apk运行正常,然后执行/ART Debug/File/Attach就可以得到如下进程列表,选中我们的gikdebugee进程,双击或者执行Attach按钮:
1-attachprocess
之后我们就会看到如下加载输出:
2-attaching
等gdb加载完毕之后我们就可以进入熟悉的CPU主窗口了:
3-firststop
Step 3.选择模块
我们的目的是调试apk里面的so动态库,因此执行/ART Debug/View/Module切换到模块列表,选中我们要调试的模块,双击它:
4-modulelist
然后CPU窗口显示的代码就是该模块对应的代码了。
Step 4.击中断点
本例中找到要调试的函数getNativeString,我们可以用CTRL+F查找到它,找到之后F2下断点,F9运行它,然后在设备中操作按钮则该方法将被断点击中,F8运行3步,我们就得到如下视图了:
5-hitbkptstop
Done! 剩下的就与ollydbg调试x86一回事啦,伙计们,上吧!
剩下更多的细节,同学们可以前往
http://gikir.com/product.php 下载使用,自行摸索更多已经提供的功能。另外,在使用gikdbg.art的过程中有任何改进意见和Bug,欢迎反馈给我们以帮助我们将他开发得更加完善。
下一篇文章(gikdbg.art系列教程2.2调试控制台)我们将详细介绍如何使用gikdbg.art调试控制台程序,敬请关注
http://gikir.com/ !
[培训]内核驱动高级班,冲击BAT一流互联网大厂工
作,每周日13:00-18:00直播授课