引言
在Mac终端上面
xxx $ lldb
(lldb)
那么Xcode是怎么开启lldb调试的呐?
Xcode的lldb调试IPhone
未越狱lldb的调试的原理
lldb每一条指令都会传给debugserver
,debugserver
在去选择性的调试某一个App
debugserver
的安装过程
- Xcode
DeviceSupport
设备支持的版本中都存在debugserver
这个服务- 路径:
Xcode.app->Contents->Developer->Platforms->iPhoneOS.platform->DeviceSupport->xxx版本->DeveloperDiskImage.dmg->usr->bin-debugserver
- 路径:
- 在用Xcode去安装我们的App的时候Xcode会将debug安装到我们的手机中
- 路径(越狱以后可以查看):
/Developer/usr/bin/debugserver
- 路径(越狱以后可以查看):
- Xcode将项目安装到Iphone的时候,会查看iphone当中是否安装了debugserver如果没有安装会将App跟debugserver一起安装到手机里面
以上是IPhone中debugserver的由来
越狱Iphone的lldb调试原理
- 我们知道在Mac中默认自带一个
lldb
- 路径:
/usr/bin/lldb
- 路径:
- 当我们在终端打开lldb的时候,lldb是需要连接到iPhone的debugserver才能调试某个App,so连接过程
- 首先Iphone中的
debugserver
去连接某个App,连接之后,提供一个端口给外面,然后lldb去连接debugserver
debugserver会监听你输入的端口号$ debugserver *:端口号 -a 进程 //*:端口号 使用手机的端口号提供服务 //-a 进程 连接App 进程(名称或者ID)
只要外面的连接这个端口号就相当于你已经连接上了某个App进行调试 - 首先Iphone中的
- debugserver连接App
例如:iPhone:/Developer/usr/bin root# ./debugserver *:3457 -A antitweak debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-360.0.26.3 for arm64. Attaching to process antitweak... Listening to port 3457 for a connection from *...
- lldb连接手机的
debugserver
xxx $ lldb
(lldb) process connect connect://172.16.107.4:3457
Process 15256 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x000000018fd9f224 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x18fd9f224 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x18fd9f228 <+0>: mov x16, #-0x20
0x18fd9f22c <+4>: svc #0x80
0x18fd9f230 <+8>: ret
Target 0: (antitweak) stopped.
(lldb)
lldb调试成功!
注意
连接成功,程序是被断住的,需要输入c
才能正常运行
使用usb连接lldb
iPhone:/Developer/usr/bin root# ./debugserver *:3457 -A antitweak
debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-360.0.26.3
for arm64.
Attaching to process antitweak...
Listening to port 3457 for a connection from *...
需要在Mac电脑中添加
python /opt/cycript_0.9.594/ConnectionShell/python-client/tcprelay.py -t 22:3456 3457:3457
上述代码不懂请查看IPhone一起玩越狱 -(六)- USB登录Iphone用户
将本地的端口映射到手机的端口3457:3457
IPhone
iPhone:/Developer/usr/bin root# ./debugserver *:3457 -A antitweak
debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-360.0.26.3
for arm64.
Attaching to process antitweak...
Listening to port 3457 for a connection from *...
item
xxx $ lldb
(lldb) process connect connect://localhost:3458
Process 573 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x000000019187b224 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x19187b224 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x19187b228 <+0>: mov x16, #-0x20
0x19187b22c <+4>: svc #0x80
0x19187b230 <+8>: ret
Target 0: (eSmartWallet) stopped.
(lldb)