逆向学习

动态调试

2021-07-03  本文已影响0人  风雨彩虹_123

Xcode动态调试原理

动态调试就是将程序运行起来,通过下断点、打印等方式查看参数、返回值、函数调用流程等。

Xcode的调试器发展历程:GDB -> LLDB ,LLDB 是基于GDB开发的。

动态调试原理

debugserver 是配合LLDB做动态调试必不可少的程序,必须将debugserver放入到手机中才能起作用。当Xcode识别到手机设备时,Xcode会自动将debugserver安装到iphone上 /Developer/usr/bin/debugserver ,该bin目录下的文件是只读的,不能修改。

debugserver在iPhone的路径

Xcode真机调试流程:

1.Xcode打开项目;

2.通过数据线链接手机;

3.在需要的地方添加断点;

4.点击run,将程序跑到手机上;

Xcode会自动将LLDB连接到手机上的debugserver上,debugserver也会与当前运行程序建立链接。
LLDB下发指令传输到手机上的debugserver,debugserver通过监听APP运行进程下发指令,APP执行了命令后将结果返回debugserver,debugserver再传输给LLDB,最总有LLDB将结果打印在控制台上。

Xcode动态调试的局限性:只能调试通过Xcode安装的APP。

动态调试任意APP

动态调试任意APP原理

1.制作调试任意APP的debugserver,Xcode帮我们自动生成的只能调试Xcode运行的APP,不能调试其他的APP。将手机/Developer/usr/bin/中的debugserver拷贝到桌面。

2.对debugserver进行权限签名,需要添加能够调试任意APP的权限。

3.使用ldid 导出debugserver的权限文件并添加权限。

ldid -e debugserver > debugserver.entitlements
//将下面2个权限添加到debugserver.entitlements中
get-task-allow   : YES
task_for_pid-allow    :   YES 

4.使用ldid 进行对添加的权限签名,然后将签名后的debugserver拷贝到手机的/usr/bin目录下

ldid -Sdebugserver.entitlements debugserver

5.debugserver 监听微信APP 进程
debugserver *:10011 -a WeChat

6.连接debugserver服务

(lldb) process connect connect://手机IP地址:debugserver服务端口号
# 使用Python 脚本去映射
# 这里用的是手机的10011端口映射电脑的10011端口, 这样就可以直接使用电脑的10011端口了
process connect connect://localhost:10011
上一篇 下一篇

猜你喜欢

热点阅读