1. GIKDBG将会怎样发展?会不会突然停止更新和技术支持?
GIKDBG v1.x版本是实验性质的产品,更多的用途是收集用户反馈以解决技术障碍,为v2.x版本做铺垫。当调试,汇编,反汇编,多线程这些主要功能完成之后将不再添加新功能,只做维护。
GIKDBG v2.x版本会在v1.x版本的经验基础之上,做如下增强:
1) 用Qt完全重写UI;
2) 开放SDK;
3) 统一iOS/ART两个版本;
4) 增加插件系统;
5) 增加ARM64调试支持;
如果极客尔科技能发展起来,它就是一个公司级的产品,反之就是一个个人级的作品。不管是这两种情况的哪一种,停止更新和技术支持是不会发生在GIKDBG身上的,各位同学可以放心学习,放心使用。
技术支持群0:184159509。
2. 附加Android进程出现如下截图怎么办?
当在附加进程的时候如果出现久等的情况,请注意查看ADB Shell的输出内容,一般通过查看它的输出内容就可以判定问题的原因。比如上图中出现的是GDB内部assert失败了,继续调试将被认为是不可信赖的,问是否中止调试。这种问题属于GDB对该设备或者该进程的兼容性问题,只需要取消调试,在ADB命令行上手工使用GDB来进一步判定问题的原因。
出现这类问题的操作如下:
1) 先判定属于GDB的问题还是GIKDBG的问题;
2) 如果属于GDB的问题则替换GIKDBG自带的/data/local/tmp/gikir_android-xxxx/GDB并删掉/data/local/tmp/gikir_android-xxxx/libthread_db.so.1这个文件,然后重试;
3) 如果GDB运行正常,则属于GIKDBG对该设备的兼容性问题,重试无效之后,你可以选择加群寻求帮助;
3. 附加或者打开Android程序出现如下截图怎么办?
详细看ADB Shell里面的输出内容,有一条是“/data/local/tmp/gikir_android-xxxx/GDB: not found”,说明最初上传GDB的时候失败了或者询问你是否上传的时候选择了否定。只需要用“$upload /data/local/tmp/gikir_android-xxxx/GDB”命令选择$(GIKDBG.ART)/adb/android/GDB上传即可解决这个问题,记得把xxxx替换成ADB Shell中的GUID内容。
4. 使用LLDB模式附加或者打开iOS程序出现如下截图怎么办?
4.1
出现这个的原因是该设备未安装debugserver依赖的动态库,你可以在SSH中执行它来验证是否是这个问题,然后将Xcode里面的DeviceSupport对应的版本拷贝到你的设备顶层目录/Developer即可。
或者
4.2
出现这个错误的原因有可能:
1) 设备上没有安装debugserver依赖的动态库,参照4.1解决;
2) 有多个debugserver进程,把所有的debugserver进程关掉重新Attach或者Open;
3) 对老设备的兼容性缺陷,重试无果之后换用GDB模式或者换设备;
5. CPU数据窗口的数据如何导出到本地或者复制到粘贴版?
在该窗口右键菜单有一个Dump选项,执行它之后会弹出一个询问Dump字节数的对话框,假如输入的字节数为size,该窗口的基址为addr,它会将addr之后的size个字节dump到$(GIKDBG)/idump/name-xxxx.xxxx.dump, $(GIKDBG.ART)/artdump/name-xxxx.xxxx.dump目录并打开一个新的数据窗口,在这个数据窗口你可以进行各种形式的复制操作。
比如你要dump一个dex内存文件,只需要做如下操作即可:
1) 在数据窗口执行Ctrl+G,输入dex的首地址addr;
2) 在数据窗口执行右键Dump菜单,输入dex的字节数size;
3) 在$(GIKDBG.ART)/artdump中找到app_process.start.end.dump文件,其中start=addr,end=addr+size;
6. CPU数据窗口不是实时更新的吗?
GIKDBG.ART以及GIKDBG.LLDB是实时更新的,只有GIKDBG for iOS的GDB模式不是实时更新,需要右键执行Refresh菜单。
7. 如果在进程列表找不到要调试的进程怎么办?
这个时候需要执行进程列表窗口右键的AttachEx菜单,手动填入进程ID以及程序包名(ART)或者程序路径(iOS)。
8. 如果在程序列表找不到要调试的文件怎么办?
这个时候需要执行程序列表右键的OpenEx菜单,手动填入程序路径和命令行参数。
9. 当切换到新线程进行单步调试的时候又自动切换到了主线程是怎么回事?
对于iOS,这是GDB的Bug,用LLDB模式解决这个问题。
对于ART,这是因为当前这个线程属于非活动状态,单步之后无法接收到其对应的信号,因此又切换回主线程。(猜测)
10. LLDB模式F7和F8为什么效果一样?
这是LLDB从Mac OSX移植到Windows的Bug,只有后续更新LLDB才能解决这个问题。你可以选中bl xxx/blx xxx的下一条指令地址执行F4代替F8的功能。GDB模式的时候有时候也有这个问题,同解。
11. 调试Android App的时候为什么只能看到一个主线程?
从GIKDBG.ART v1.1开始已经支持Android程序的多线程调试,出现这个问题的原因:
1) 最初上传依赖的文件没有成功,你需要在ADB Shell中执行“$upload /data/local/tmp/gikir_android-xxxx/libthread_db.so.1”命令然后选择$(GIKDBG.ART)/adb/android/libthread_db.so.1上传至设备,注意xxxx是设备gikir_android-这个目录的GUID;
2) 多线程调试必须使用GIKDBG自带的GDB,如果替换过GDB则不行;
3) Android系统太老,不支持多线程;
4) Bug?加群将更多信息反馈给作者。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)