背景
在调试release包时由于没有符号信息,只能通过地址下断点。今天给大家介绍一款工具restore-symbol。 使用这款工具后可以在调试release包时候通过符号下断点。
准备工作
- clone并编译restore-symbol
git clone --recursive https://github.com/tobefuturer/restore-symbol.git
cd restore-symbol && make
./restore-symbol
- 准备好待调试的文件,这里我使用x86架构MacOS App
Dash
先试试不恢复符号是什么效果
想要用lldb调试这个app需要先对这个app进行重签名
codesign -f -s 证书名 /Applications/xxx.app
先用hopper随便找个容易进入的符号
可以看到熟悉的viewDidLoad就用它把
可以看到下断点失败了。
这时只能通过ASLR+偏移地址计算出真实地址来下断点非常麻烦
恢复符号后进行调试
先恢复符号
./restore-symbol ~/Desktop/Dash.app/Contents/MacOS/Dash -o ~/Desktop/Dash.app/Contents/MacOS/Dash1
然后手动替换一下Mach-O文件
在重复先前的操作
发现可以断点了,可以愉快的进行调试了😄
后记
本文主要是演示了X86上恢复OC断点的基本方法。看完之后可能对debug-symbol的作用有了一定的了解。此外restore-symbol还能通过IDA恢复block的符号。 真机由于证书的问题步骤更繁琐。不过有个开源项目MonkeyDev简化了这些操作。
关于App-Infra DevOps 团队
App-Infra DevOps团队作为公司的移动研发中台,致力于优化公司各业务的研发和交付过程中的质量、成本、安全、效率和体验。到目前为止我们已经有超过上百个业务接入,1万+人日常使用;平均每天支撑 3000+研发任务顺利交付;建设了业界领先且可能是国内最大的构建集群,每天运行20万+次构建任务。
字节跳动当前作为国内甚至全球最大的"应用工厂",我们期待更多有热情和创造力的同学加入,为这座工厂打造业界最领先,最高效的生产工具。
我们的工作内容主要包括:
- 提供任务管理,工程管理,开发调试,交付流程支持的一站式同开发平台。同时提供Native版及Web版,目标成为下一代端云协同的研发基础设施。
- 客户端 IDE 云化的探索性项目,目的是提供一整套线上编码、调试环境,让用户打开浏览器就可以进行代码开发,满足不同场景的需要,提升研发效率。
加入我们
北京-高级iOS开发工程师 — 终端技术 job.toutiao.com/s/2YHxkXW
职位描述
1、负责头条公司产品的通用技术研发和性能优化,完成高质量编码和测试工作 2、框架维护,通用工具开发等 3、设计良好的代码结构,不断迭代重构; 4、前沿技术研究,承担重点、难点的技术攻坚
职位要求
1、本科及以上学历,计算机、通信等相关专业 2、具有扎实的编程功底,良好的设计能力和编程习惯 3、熟练掌握Objective-C,C++,熟悉Swift的优先 4、熟悉bash/python/ruby/js的优先
上海-高级iOS开发工程师 — 基础技术 job.toutiao.com/s/2YHm8a7
职位描述
- 负责公司客户端产品的通用基础技术研发,完成高质量编码和测试工作
- 通用研发工具开发、通用框架开发等
- 设计良好的代码结构,不断迭代重构
- 前沿技术研究,承担重点、难点的技术攻坚
职位要求
- 本科及以上学历,计算机、通信等相关专业
- 具有扎实的编程功底,良好的设计能力和编程习惯
- 熟练掌握Objective-C,C++,熟悉Swift的优先
- 熟悉前后端相关和跨平台技术、熟悉bash/python/ruby/js等语言和相关框架的优先
杭州-高级iOS开发工程师 — 基础技术 job.toutiao.com/s/2YHdPAE
职位描述
- 负责公司跨平台相关技术研发,完成高质量编码和测试工作
- 负责通用跨端框架及周边工具开发等
- 设计良好的代码结构,不断迭代重构
- 前沿技术研究,承担重点、难点的技术攻坚
职位要求
- 本科及以上学历,计算机、通信等相关专业
- 具有扎实的编程功底,良好的设计能力和编程习惯
- 熟练掌握Objective-C,C++,熟悉Swift的优先
- 熟悉前后端相关和跨平台技术,熟悉bash/python/ruby/js等语言和相关框架的优先