内容简介:动态调试是指将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。通过
动态调试是指将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。
一、Xcode动态调试原理
Xcode
内置调试器 lldb
将输入的指令通过 debugserver
传输给App,App执行指令后将反馈信息再通过 debugserver
传送给 lldb
。
-
关于GCC、LLVM、GDB、LLDB
Xcode Xcode
-
debugserver
一开始存放在电脑中的Xcode
里面(注意版本号)-
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver
-
-
当
Xcode
识别到手机设备时,会将debugserver
安装到手机上-
/Developer/usr/bin/debugserver
-
-
Xcode
动态调试局限性- 一般情况下,只能调试通过
Xcode
安装的App
- 一般情况下,只能调试通过
二、动态调试任意App
通过 Xcode
安装到手机上的 debugserver
缺少一定权限,只能调试通过 Xcode
安装的APP。若想调试任意APP,则需要对 debugserver
做一些改动。 手机上的 /Developer
目录是只读的,无法直接对 /Developer/usr/bin/debugserver
文件修改,需要先把其复制到电脑。
0x01 debugserver瘦身
-
默认情况
debugserver
是支持全部arm
架构$ lipo -info debugserver Architectures in the fat file: debugserver are: armv7 armv7s arm64 复制代码
-
减小
debugserver
的大小,只支持当前手机架构$ lipo debugserver -thin arm64 -output debugserver_64 $ lipo -info debugserver_64 Non-fat file: debugserver_64 is architecture: arm64 复制代码
0x02 给debugserver新增权限
-
获取
debugserver
初始权限$ codesign -d --entitlements - debugserver <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.backboardd.debugapplications</key> <true/> <key>com.apple.backboardd.launchapplications</key> <true/> <key>com.apple.diagnosticd.diagnostic</key> <true/> <key>com.apple.frontboard.debugapplications</key> <true/> <key>com.apple.frontboard.launchapplications</key> <true/> <key>com.apple.security.network.client</key> <true/> <key>com.apple.security.network.server</key> <true/> <key>com.apple.springboard.debugapplications</key> <true/> <key>run-unsigned-code</key> <true/> <key>seatbelt-profiles</key> <array> <string>debugserver</string> </array> </dict> </plist> 复制代码
-
将上面获取的原始权限保存到
debugserver.entitlements
中,并添加两个调试相关权限
0x03 对debugserver重签名
-
codesign
# 签名权限 $ codesign -f -s - --entitlements debugserver.entitlements debugserver_64 debugserver_64: replacing existing signature # 或简写为 $ codesign -fs- --entitlements debugserver.entitlements debugserver_64 复制代码
-
ldid
# 获取debugserver之前那的权限(可到当前目录下查看debugserver.entitlements内容) $ ldid -e debugserver > debugserver.entitlements # 添加两个权限 # 重签名 $ ldid -Sdebugserver.entitlements debugserver debugserver_64: replacing existing signature 复制代码
任选上述两种方法的一种重签名方式,将签好权限的 debugsever_64
重命名为 debugserver
,复制到手机的 /usr/bin/debugserver
,便于找到 debugserver
指令。
-
ssh
登录到手机给debugserver
执行权限iPhone:~ root# chmod +x /usr/bin/debugserver 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Linux内核常用的动态调试手段
- osquery动态调试和重打包
- Android Studio动态调试smali
- Java 动态调试技术原理及实践
- Smail动态调试之Android Studio
- 反编译之利用AndroidStudio动态调试smali源码
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高性能网站建设指南(第二版)
Steve Souders / 刘彦博 / 电子工业出版社 / 2015-5 / 55.00元
《高性能网站建设指南:前端工程师技能精髓》结合Web 2.0以来Web开发领域的最新形势和特点,介绍了网站性能问题的现状、产生的原因,以及改善或解决性能问题的原则、技术技巧和最佳实践。重点关注网页的行为特征,阐释优化Ajax、CSS、JavaScript、Flash和图片处理等要素的技术,全面涵盖浏览器端性能问题的方方面面。在《高性能网站建设指南:前端工程师技能精髓》中,作者给出了14条具体的优化......一起来看看 《高性能网站建设指南(第二版)》 这本书的介绍吧!