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

IPhone一起玩越狱 -(十八)- 探究Xcode怎么使用lldb调试我们的程序_第1张图片

引言

在Mac终端上面

 xxx $ lldb
(lldb)

那么Xcode是怎么开启lldb调试的呐?

Xcode的lldb调试IPhone

未越狱lldb的调试的原理

IPhone一起玩越狱 -(十八)- 探究Xcode怎么使用lldb调试我们的程序_第2张图片

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:debugserver      PROJECT: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>: 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)

你可能感兴趣的:(IPhone一起玩越狱 -(十八)- 探究Xcode怎么使用lldb调试我们的程序)