IOS逆向学习-动态调试原理、LLDB

本文详细介绍了Xcode的动态调试原理及其应用,包括Xcode如何通过debugserver远程调试应用程序、LLDB命令的具体使用方法等内容。

1. 动态调试Xcode

  • 什么叫动态调试?
    • 将程序运行起来,通过下面断点,打印等方式,查看参数、返回值、函数调用流程等

1.1 Xcode的动态调用原理

  • 关于GCC、LLVM、GDB、LLDB

    • Xcode的编译器发展:GCC -> LLVM
    • Xcode的调试器发展:GDB -> LLDB
  • debugserver一开始存放在Mac的Xcode里面

    • /Applications/Xcode12.3.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver
      在这里插入图片描述
  • 当Xcode识别手机设备时,Xcode会自动将debugserver安装到iPhone上,如果是从来没有真机测试的iPhone上是没有debugserver的:在这里插入图片描述

  • Xcode调试的局限性:一般情况下,只能通过Xcode安装的APP

  • Xcode调试APP的原理图:
    在这里插入图片描述

  • 当你真机运行的时候,Xcode会在手机上安装debugserver的,debugserver监听着LLDB发送的一些指令,首先LLDB将这些指令传送给debugserver, 然后debugserver接收到这个指令时,在执行到app上,app执行指令后把结果反馈给debugserver,然后再由debugserver把结果返回给LLDB,在由LLDB把信息打印在Xcode上,这也是Xcode可以动态调试app的原因:
    在这里插入图片描述

  • p: 直接地址

  • po:打印对象

  • LLDB 是通过数据线来传递数据的

1.2 动态调试任何APP

1.2.1 原理图和条件

动态调试任何App示意图:
在这里插入图片描述

  • 首先手机上必须要有debugserver,其次我们可以通过终端 输入lldb进入lldb的调试环境:在这里插入图片描述

1.2.2 debugserver的权限问题

  • 默认情况下,/Developer/usr/bin/debugserver缺少一定的权限,只能通过Xcode安装的APP,无法连接其他APP(比如来自App Store的App)
  • 如果希望调试其他APP,需要对debuserver重新签名,签上两个调试相关的权限
    • get-task-allow Boolean 类型 值为YES
    • task_for_pid-allow Boolean 类型 值为YES
  • 如何给debugserver签上权限
    • iPhone上的/Developer目录是只读,无法直接对/Developer/usr/bin/debugserver文件直接签名,需要先把debugserver赋值到Mac上
    • 通过ldid导出以前文件以前的签名权限:ldid -e debugserver > debugserver.entitlements
    • debugserver.entitlements文件加上get-task-allow、task_for_pid-allow权限:在这里插入图片描述
    • 在通过ldid命令重新签名:did -Sdebugs
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值