首页
社区
课程
招聘
[原创]lldb +debugserver调试环境部署(一)
发表于: 2014-7-15 17:04 24120

[原创]lldb +debugserver调试环境部署(一)

2014-7-15 17:04
24120
因为Apple已经弃gdb投lldb,所以随着我动态调试的次数越来越频繁,gdb上一个接一个的bug经常会让人很恼火。既然苹果打算建立自己的调试器王国,也投入了钱力精力,那我们干脆也上手lldb玩玩,看看lldb是不是比gdb要更好用(以下操作在iPhone 5,iOS 7.0.4上测试,应该也适用于arm64,如果不行,请参照iphonedevwiki)。
使用的工具
Otool             ——查看程序依赖哪些动态库信息,反编代码段……等等等等
Ldid               ——签名工具,通过plist文件指定了授予一应用的一组特权
Gdbserver     ——调试工具
SSH               ——远程控制
Lipo               ——合并拆分对支持不同芯片的mach-o

一.定制一个可以调试的debugserver
1.下载编译ldid
git clone git://git.saurik.com/ldid.git
cd ldid
git submodule update --init
./make.sh

完成以上操作会在ldid目录下生产一个mac 可执行程序 ldid。
2.获取debugserver和ARMDisassembler.framework
我这以xcode 5.1.1的版本为例。
找到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.1 (11D167)/DeveloperDiskImage.dmg

如果你在Mac那双击它,你会看到如下目录:


红色框圈起来的就是我们需要使用到的部分,此时你一定很高兴的看到了debugserver,但是别高兴的太早了,我们还要对这个debugserver做下处理,使其能正常的调试起来。
将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签名,所以需要提取对应版本)
lipo -thin armv7 /Developer/usr/bin/debugserver -output ~/debugserver
lipo -thin armv7S /Developer/usr/bin/debugserver -output ~/debugserver
lipo -thin armv64/Developer/usr/bin/debugserver -output ~/debugserver

以上根据自己手机支持的armv7、armv7s、arm64提取,我这边以iphone5为例,是armv7,所以我使用
# cd Development/DeveloperDiskImage/usr/bin/
# mv debugserver _debugserver
# lipo -thin armv7 _debugserver -output debugserver


2) 保存以下授予特权内容为entitlement.xml
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "058K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3q4H3M7r3I4W2i4K6u0W2j5$3!0E0i4K6u0r3c8q4c8p5M7#2)9J5c8W2m8J5L8%4m8W2M7Y4c8&6e0r3W2K6N6q4)9J5k6o6q4Q4x3X3f1H3i4K6u0W2k6s2c8V1">
<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 -p 22 debugserver root@192.168.20.21:/usr/bin/

4) 测试debugserver是否安装成功(如下正常)
# debugserver 192.168.40.45:12345 -a "PPAppInstall"
  debugserver-310.2 for armv7.
  Attaching to process PPAppInstall...
  Listening to port 12345 for a connection from 192.168.40.45...


参考链接:
a44K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3W2H3K9r3!0F1k6h3c8W2N6Y4N6A6K9$3W2Q4x3X3g2F1k6i4c8Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7q4)9J5c8V1c8W2j5Y4g2Y4M7$3g2J5N6X3g2J5

PDF下载:  lldb + debugservert调试环境部署(一).pdf

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 89
活跃值: (230)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
2
不错。支持,加油加油
2014-7-15 19:01
0
雪    币: 6
活跃值: (1493)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持ios上的技术文章
2014-7-15 22:26
0
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯  赞一个,
2014-7-16 09:04
0
雪    币: 287
活跃值: (618)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
我来顶宝珠姐的~~
2014-7-17 11:11
0
雪    币: 14
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
前辈你好,请问你原创PDF的第一段话,是否参考了小弟的帖子
2014-7-23 16:19
0
雪    币: 287
活跃值: (618)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=snakeninny;1303086]前辈你好,请问你原创PDF的第一段话,是否参考了小弟的帖子?[/QUOTE]

近距离抚摸大神啊!我咂app壳的时候还是参考大神的发的那工具源码!大神快到我碗里来吧
2014-7-23 17:46
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
使用的工具,我也有点眼熟。
2014-7-24 15:31
0
雪    币: 3236
活跃值: (4006)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=snakeninny;1303086]前辈你好,请问你原创PDF的第一段话,是否参考了小弟的帖子?[/QUOTE]

哈哈,大神就别折煞我了,就是参考你的
2014-7-24 18:50
0
雪    币: 3236
活跃值: (4006)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
借鉴念茜的排版哈,我看挺好的,就拿来用了,罪过罪过,不过内容货真价实是我自己有补充的~
2014-7-24 18:51
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我看到很开心呀~~ 让你误会啦~~

2014-7-24 18:56
0
雪    币: 255
活跃值: (90)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
请问一下,我把debugger放进手机后,运行debugserver *:1234 -a "OPlayer Lite"后,出现一下错误
dyld: Symbol not found: _BKSActivateForEventOptionTypeBackgroundContentFetching
  Referenced from: /usr/bin/debugserver
  Expected in: /System/Library/PrivateFrameworks/BackBoardServices.framework/BackBoardServices
in /usr/bin/debugserver
Trace/BPT trap: 5
请问怎么解决呀
2014-8-21 10:02
0
雪    币: 112
活跃值: (37)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
13
楼主你好,能不能给我个8.1(12B411)的DeveloperDiskImage.dmg,先谢谢你了
2015-1-14 16:38
0
雪    币: 8
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
154K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0T1M7#2)9J5k6h3W2G2M7%4u0W2i4K6u0W2j5$3!0E0i4K6u0r3k6X3!0J5N6h3#2Q4x3X3g2H3K9s2m8Q4x3@1k6E0L8$3c8Q4x3@1c8$3K9h3g2%4N6r3S2J5k6h3q4V1i4K6t1$3N6r3W2V1i4K6y4p5y4e0u0Q4x3U0k6W2P5s2c8J5j5g2)9K6c8s2m8S2k6$3g2Q4x3U0f1K6c8o6q4Q4x3U0k6H3j5h3N6W2i4K6y4p5x3g2!0q4z5q4!0n7c8W2)9&6z5g2!0q4z5g2)9^5y4#2)9^5b7#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4#2!0m8c8W2)9^5y4#2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4#2!0m8b7W2!0m8x3q4!0q4y4q4!0n7z5g2)9&6c8W2!0q4y4q4!0n7z5q4)9^5c8q4!0q4z5g2)9&6y4q4)9&6z5b7`.`.
2015-1-16 10:28
0
游客
登录 | 注册 方可回帖
返回