PS:实在抱歉,插入图片太累了,只复制了文字,看图片的访问
http://gikir.com/blog/?p=75 。
void usage(void) {
printf(“原创文章,欢迎转载和引用,不过请附上原始链接(
http://gikir.com/blog/?p=75 )和本申明,否则嘛,哼哼…\n”);
}
本篇文章我们将介绍如何使用gikdbg调试动态库(tweak), 此处我们以注入到每一个调试进程的辅助动态库gikir_iserver_injecter.dylib为例进行Step by step的操作与解释以及一些注意事项的说明。
Step 0.前置说明
手机端:iPhone 5,iOS 7.0.4,gikir_iserver v1.1.build140520.1;
PC端:ParallelDesktop虚拟机,Windows 8.0,gikdbg v1.1.build140520.1;
Step 1.连接设备
手机端点击gikir_iserver的图标运行服务程序,PC端执行iDebug/Device/Login (USB)菜单,得到如下输出说明连接成功:
app-connect
如果在这一步出现无法连接的情况请逐一检查:
1) 是否有之前遗留的lldb.exe进程,手工杀掉然后重启gikdbg并连接;
2) 是否gikir_iserver使用的6080端口被之前遗留的gikir_iserver_root或者/bin/sh进程占用,手工杀掉或者重启设备然后重启gikir_iserver;
3) 是否有使用Apple USB驱动服务的其他程序与gikdbg冲突,手工杀掉这类程序然后重启gikdbg并连接。
连接成功后,我们通过iDebug/Option/Debugger选择GDB模式,调试动态库只能使用该模式。因为LLDB模式下在调用指定函数时会禁止所有断点,导致断点无法击中我们指定的函数,也就无法调试了。
Step 2.选择宿主
为了调试动态库,我们需要先运行一个宿主,此处我们以如下图所示的可执行程序为例,实际调试tweak过程中我们以目标App为宿主:
dylib-proglist
双击或者点击Open之后一路点击确定,进入CPU主窗口。
Step 3.上传动态库
在PC端有我们开发好的动态库gikir_iserver_injecter.dylib,我们在iShell中通过$upload /var/tmp/gikdbg_tweak.dylib命令将选择本地动态库上传至/var/tmp目录下,名称按照实际需求定,本例为gikdbg_tweak.dylib。
dylib-upload
Step 4.注入动态库
执行iDebug/View/Module得到模块列表窗口,右键选择Inject dylib:
dylib-inject
点击Ok之后如果注入成功得到如下的模块列表:
dylib-newmodlist
如果注入失败在iShell执行如下命令:call (char *)dlerror()查看具体的信息然后解决之后继续尝试。
Step 5.调试动态库
注入成功后,在模块列表双击到CPU主窗口,查找到我们需要调试的函数,此处为:
dylib-debugee
确保当前选中行在需要调试的函数区间内,执行鼠标右键Invoke菜单或者CTRL+I快捷键如下:
dylib-invoke
这个时候我们可以输入该函数的前四个参数,可以是数值(地址),也可以是字符串,比如:
dylib-invokeparam
点击Ok之后就可以调试该函数了:
dylib-debugging
可以看到参数r0-r3正好是我们输入的参数,剩下的调试过程与调试控制台一样。如果需要输入更多参数只需要将(0,0,0,0)改成(0,0,0,…,0)即可!
实际调试tweak的过程与之类似:
1. 开发tweak并通过$upload命令上传到设备;
2. Attach目标App;
3. 在模块列表执行Inject dylib;
4. 在注入的模块中找到需要调试的函数执行右键Invoke菜单。
其他更多的细节,可以前往
http://gikir.com/product.php 下载使用。在使用gikdbg的过程中有任何改进意见和Bug,欢迎反馈给我们以帮助我们将他开发得更加完善。
下一篇文章(gikdbg系列教程3.3调试App)我们将详细介绍如何使用gikdbg调试App程序,敬请关注
http://gikir.com/ !
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!