美文网首页
iOS 几种Crash解析方式

iOS 几种Crash解析方式

作者: 水煮杰尼龟 | 来源:发表于2021-02-05 15:57 被阅读0次
当遇到crash的时候,一般可能会根据复现流程来抓,而有时候又不具备这样的条件。 ps:集成了第三方工具就不用管了。

下面就来看几种当只有crash文件和dSYM文件的时候的解析方式

1. symbolicatecrash解析
  • 拿到crash文件

    • 如果是自己公司测试机,通过Xcode -> Window -> Devices and Simulators -> View Device Logs
    • 如果无法拿到手机,只能死皮赖脸让发生crash的人,从手机隐私->分析与改进/分析->分析数据里到处ips文件给你了,改后缀为.crash
  • 通过symbolicatecrash 来解析,symbolicatecrash路径Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

  • 建一个文件夹将.crash,.dSYM,symbolicatecrash放在一个文件夹

  • ./symbolicatecrash qdt.crash qdt.dSYM/Contents/Resources/DWARF/xxx > xxx.txt 通过这个指令导出一个xxx.txt文件

  • 如果出现Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69., 先使用指令export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer,再导出xxx.txt ,结果如下:

    解析前.png
    解析后.png
atos命令解析

采用atos命令, symbolicatecrash 也是 apple 基于 atos 方便开发者进行的封装
通过指令atos -o qdt.dSYM/Contents/Resources/DWARF/xxx -arch arm64 -l 0x104c1b140 0x1045fc000

atos.png
lldb 解析

首先准备我们可能需要的东西

  • Stack Address:0x104c1b140
  • Load Address:0x1045fc000
  • _PAGEZERO:0x100000000 (arm64)
  • File Offset: 6418752 = Stack Address - Load Address
    这里需要了解一点知识
_PAGEZERO
arm64 0x100000000
非arm64 0x4000

ASLR: 让mach-o载入内存时内存开始位置 发生变化,ASLR 随机产生偏移

代码段开始位置 = ASLR offset + _PAGEZERO
函数的内存地址(VM Address) = ASLR Offset + _PAGEZERO Size + File Offset
hopper,ida中的地址都是未使用ASLR的 VM Address
  • 可以通过dsym来看看otool -l qdt.dSYM/Contents/Resources/DWARF/xxx > qdt.txt
    image.png
  • 那么实际我们要找的地址就是_PAGEZERO Size + File Offset , 也就是 0x100000000+6418752
  • 首先mac终端进入lldb
    image.png
  • 输入指令target create --arch arm64 qdt.dSYM/Contents/Resources/DWARF/xxx
    image.png
  • image lookup -a 0x000000010061f140 查找地址 即可
    image.png
Dwarfdump 解析
  • 通过指令dwarfdump --lookup 0x000000010061f140 --arch arm64 qdt.dSYM/Contents/Resources/DWARF/xxx
    image.png

end

相关文章

网友评论

      本文标题:iOS 几种Crash解析方式

      本文链接:https://www.haomeiwen.com/subject/wwtgtltx.html