我的第一次lldb安装使用之旅

使用的工具
Otool              ——查看程序依赖哪些动态库信息,反编代码段
Ldid               ——签名工具,通过plist文件指定了授予一应用的一组特权
debugserver        ——手机端调试工具
SSH                ——远程控制
Lipo               ——合并拆分对支持不同芯片的mach-o

一.定制一个可以调试的debugserver

1.下载编译ldid

如果安装过,命令行直接敲ldid会有回显。

没有,就用git下载,make安装。

git clone git://git.saurik.com/ldid.git
cd ldid
git submodule update --init
./make.sh

完成以上操作会在ldid目录下生产一个mac 可执行程序 ldid。他是 ios签名工具。


2.获取debugserver和ARMDisassembler.framework
我的xcode 是version7.2(2016年6月7日)

找到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.3 (11D167)/DeveloperDiskImage.dmg

这里的这个8.3是我的测试用机iphone5c的系统版本。

点击图片以查看大图图片名称:	1.jpg查看次数:	6文件大小:	24.0 KB文件 ID :	90973
如果你在Mac那双击它,你会看到如下目录:
点击图片以查看大图图片名称:	2.jpg查看次数:	8文件大小:	89.6 KB文件 ID :	90974

红色框圈起来的就是我们需要使用到的部分,此时你一定很高兴的看到了debugserver,但是别高兴的太早了,我们还要对这个debugserver做下处理(签名ldid,并用thin瘦一下身),使其能正常的调试起来。
将ARMDisassembler.framework 拷贝到手机上/System/Library/PrivateFrameworks目录下。
很多人一定奇怪为啥要这步骤,你们可以自己试试,去掉ARMDisassembler.framework与存在ARMDisassembler.framework,在LLDB调试的过程看ARM反汇编的质量和效果。
我这边使用scp拷贝到设备上去:

# cd /Volumes/DeveloperDiskImage/Library/PrivateFrameworks
# scp -r -p 22 ARMDisassembler.framework root@192.168.20.21:/System/Library/PrivateFrameworks


3.提取对应设备版本的debugserver,并对其签名授予特权

1) 提取对应的debugserver(由于ldid不支持对FAT文件格式的mach-o签名,所以需要提取对应版本)

我的iphone5c的cpu是armv7s,因此我用

# cd /Volumes/DeveloperDiskImage/usr/bin/
# mv debugserver /usr/_debugserver
# lipo  -thin  armv7 s  usr/_debugserver  -output  usr/_debugserver

2) 保存以下授予特权内容为entitlement.xml
<!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.springboard.debugapplications</key>
     <true/>
     <key>get-task-allow</key>
     <true/>
     <key>task_for_pid-allow</key>
     <true/>
     <key>run-unsigned-code</key>
     <true/>
</dict>
</plist>

3) 使用ldid对debugserver签名授予特权
# ldid -Sentitlement.xml debugserver
将签名授予特权的debugserver拷贝到手机/usr/bin目录下
# scp debugserver root@192.168.XX。XXX:/usr/bin/

4) 运用debugserver 开启或附着上待动态调试的进程

首先ssh登录到目标手机上

如果是开启我们自己的进程,可以这样

./debugserver *:1234 /var/root/hello

其中参数一是手机的ip地址和监听端口 参数二是待调试进程名,这里给的是一个arm上的可执行文件。 

如果是要调试一个已运行的进程(通常调试系统进程或者某个第三方app时运用)

第一步,ps aux找到想要调试的进程名称

第二步,



5)mac电脑端直接用lldb连上手机进行调试。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值