内容简介:动态调试是指将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。通过
动态调试是指将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。
一、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源码
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rework
Jason Fried、David Heinemeier Hansson / Crown Business / 2010-3-9 / USD 22.00
"Jason Fried and David Hansson follow their own advice in REWORK, laying bare the surprising philosophies at the core of 37signals' success and inspiring us to put them into practice. There's no jarg......一起来看看 《Rework》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
HTML 编码/解码
HTML 编码/解码