matrix
matrix copied to clipboard
请问有没有实际例子,根据offset符号化到代码行的例子。
OOM的报告里出现了uuid和offset。使一堆数字,看起来他认识我,我不认识他。花了很多时间去研究,最后也没有符号化出来。 如果不能做到符号化,那么实际使用起来有什么意义?
所以其实是能符号化的。
内存报告里面只有偏移地址(offset)。uuid 是二进制的标志,用来找对应的 dwarf 文件。
使用 atos 命令符号化,格式:
atos -o [dwarf文件地址] -arch arm64 -l [loadAddress] [instructionAddress]
instructionAddress - loadAddress = offset
atos 不接受 offset 地址。
所以假设 :
offset = 1000
可以强制设定 loadAddress = 1 (如果是0,会解不出), 那么 instructionAddress = loadAddress + offset。
instructionAddress = 1000 + 1 = 1001
那么最后的 atos 命令是:
0x3E9 ( 1001 的十六进制)
atos -o [dwarf文件地址] -arch arm64 -l 0x1 0x3E9
可以是什么样子的,莫名其妙是什么样子的? 举个例子看看?
所以问题的重点是怎么找到 loadAddress 呢,有知道的吗
所以问题的重点是怎么找到 loadAddress 呢,有知道的吗
同文,收集到的只有uuid和offset,没有loadAddress,那么就没有 instructionAddress(0x3E9),那咋用atos命令符号化出来呢
loadAddress在app运行的时候可以通过代码读取的到的, matrix已经有工具类可以直接读取
let util = WCCrashReportInfoUtil.sharedInstance() as! WCCrashReportInfoUtil let images = util.getBinaryImages() ?? []
loadAddress在app运行的时候可以通过代码读取的到的, matrix已经有工具类可以直接读取
let util = WCCrashReportInfoUtil.sharedInstance() as! WCCrashReportInfoUtil let images = util.getBinaryImages() ?? []
正解,可以自己修改代码将image_load信息写入上报信息中。然后自己写脚本拼装atos命令
offset 已经有了,loadAddress 可以直接写 __PAGEZERO 的大小,arm64 下是:0x100000000,非 arm64 下是:0x4000,也就是说,可以这样解析: atos -o [dwarf文件地址] -arch arm64 -l 0x100000000 0x100000000+offset