文字版,图文版就访问原始链接吧。
void usage(void) {
printf(“原创文章,欢迎转载和引用,不过请附上原始链接(
http://gikir.com/blog/?p=102 )和本申明,否则嘛,哼哼…\n”);
}
gikdbg.art-Gikir Debugger for Android RunTime, 是Android平台的32位汇编级调试器。此处的Android RunTime既指DVM RunTime又指ART RunTime,因此不管是运行dalvik虚拟机还是运行本地代码的art均可以使用gikdbg.art进行程序的二进制调试分析。不同之处在于dalvik虚拟机的运行时只能调试so动态库,而art运行时不仅能调试so动态库,还能调试系统镜像oat,可执行程序dex这样的文件。另外,gikdbg-Gikir Debugger for iPhone OS,是调试越狱苹果设备的32位汇编级调试器,同学们莫搞混淆了哈,它需要一些复杂点的服务端和客户端的配置,而gikdbg.art在正常情况下是不需要手工配置的,所以别去找android server了。
对于静态分析,可以执行/ART Debug/View/ELF Data…,/ART Debug/View/ELF Code…两个菜单打开本地so,oat,dex文件。下面是两个样例图:
8-datalist
数据视图
9-codelist
代码视图
对于动态分析,gikdbg.art提供了和ollydbg一样用户体验的操作,还提供了两个命令行界面以便进行更方便的设备操作。在进行这一切之前,我们需要找到连接的设备并且登陆它:
0-devicelist
设备列表
对于已经在设备列表中的设备,我们只需要login和logout即可,如果想使用无线的方式访问设备,只需要设置好设备的adbd以tcp的方式运行,然后执行Connect菜单就可以将该设备加入到设备列表中去。
默认情况下设备的adbd是以usb方式运行的,我们可以在设备终端模拟器中执行如下命令序列变更为tcp方式:
{
setprop service.adb.tcp.port 5555
stop adbd
start adbd
}
如果我们想从tcp模式变更为usb模式可以使用如下命令序列:
{
setprop service.adb.tcp.port 0
stop adbd
start adbd
}
登陆设备之后,我们就拥有两个可以使用的命令行了,他是adb.exe进程的UI映射:
3-shell
在ADB Shell里面我们除了可以执行常规的shell命令之外,还可以执行$开头的自定义命令,用于上传下载文件,安装apk文件等。
在GDB Shell里面处于非调试状态他就是一个普通的adb.exe shell,处于调试状态他就是一个gdb shell,可以在里面执行一些gdb的信息查询命令,用以丰富和补充gikdbg.art UI上没有提供的功能。需要注意的是别执行一些控制性的命令,比如下断点b,watch等,因为这些命令执行后会导致gikdbg.art与gdb的状态不一致,会出现一些奇怪的问题。
通过执行/ART Debug/File/Open,/ART Debug/File/Attach我们分别可以拿到控制台列表以及进程列表,这个与我们在PC上使用ollydbg是一样的:
1-attachlist
进程列表
2-consolelist
控制台列表
Open或者Attach之后就可以进入我们似曾相似的CPU主界面了:
4-cpu
然后我们就处于调试状态,GDB Shell可以执行gdb命令了:
7-debugingshell
还可以通过/ART Debug/View/Module,/ART Debug/View/Breakpoint等查看对应的数据:
5-modulelist
模块列表
6-bplist
断点列表
这些都是与ollydbg一样的,剩下更多的细节,同学们可以前往
http://gikir.com/product.php 下载使用,自行摸索更多已经提供的功能。另外,在使用gikdbg.art的过程中有任何改进意见和Bug,欢迎反馈给我们以帮助我们将他开发得更加完善。
下一篇文章(gikdbg.art系列教程2.1调试so动态库)我们将详细介绍如何使用gikdbg.art调试so动态库程序,敬请关注
http://gikir.com/ !
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课