IPhone一起玩越狱|IPhone一起玩越狱 -(十八)- 探究Xcode怎么使用lldb调试我们的程序

IPhone一起玩越狱|IPhone一起玩越狱 -(十八)- 探究Xcode怎么使用lldb调试我们的程序
文章图片
引言 在Mac终端上面

xxx $ lldb (lldb)

那么Xcode是怎么开启lldb调试的呐?
Xcode的lldb调试IPhone 未越狱lldb的调试的原理
IPhone一起玩越狱|IPhone一起玩越狱 -(十八)- 探究Xcode怎么使用lldb调试我们的程序
文章图片
lldb每一条指令都会传给debugserverdebugserver在去选择性的调试某一个App
debugserver的安装过程
  • XcodeDeviceSupport设备支持的版本中都存在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 *:端口号 -a 进程 //*:端口号使用手机的端口号提供服务 //-a 进程连接App进程(名称或者ID)

    debugserver会监听你输入的端口号
    只要外面的连接这个端口号就相当于你已经连接上了某个App进行调试
  1. debugserver连接App
    例如:
    iPhone:/Developer/usr/bin root# ./debugserver *:3457 -A antitweak debugserver-@(#)PROGRAM:debugserverPROJECT:debugserver-360.0.26.3 for arm64. Attaching to process antitweak... Listening to port 3457 for a connection from *...

  2. 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>: retlibsystem_kernel.dylib`mach_msg_overwrite_trap: 0x18fd9f228 <+0>: movx16, #-0x20 0x18fd9f22c <+4>: svc#0x80 0x18fd9f230 <+8>: ret Target 0: (antitweak) stopped. (lldb)

【IPhone一起玩越狱|IPhone一起玩越狱 -(十八)- 探究Xcode怎么使用lldb调试我们的程序】lldb调试成功!
注意
连接成功,程序是被断住的,需要输入c才能正常运行
使用usb连接lldb
iPhone:/Developer/usr/bin root# ./debugserver *:3457 -A antitweak debugserver-@(#)PROGRAM:debugserverPROJECT: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:debugserverPROJECT: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>: retlibsystem_kernel.dylib`mach_msg_overwrite_trap: 0x19187b228 <+0>: movx16, #-0x20 0x19187b22c <+4>: svc#0x80 0x19187b230 <+8>: ret Target 0: (eSmartWallet) stopped. (lldb)

    推荐阅读