matrix icon indicating copy to clipboard operation
matrix copied to clipboard

请问有没有实际例子,根据offset符号化到代码行的例子。

Open scorplot opened this issue 5 years ago • 7 comments

OOM的报告里出现了uuid和offset。使一堆数字,看起来他认识我,我不认识他。花了很多时间去研究,最后也没有符号化出来。 如果不能做到符号化,那么实际使用起来有什么意义?

scorplot avatar Jan 08 '20 06:01 scorplot

所以其实是能符号化的。

内存报告里面只有偏移地址(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

chzhij5 avatar Jan 09 '20 12:01 chzhij5

可以是什么样子的,莫名其妙是什么样子的? 举个例子看看?

chzhij5 avatar May 14 '20 02:05 chzhij5

所以问题的重点是怎么找到 loadAddress 呢,有知道的吗

KorolZhu avatar Nov 12 '20 12:11 KorolZhu

所以问题的重点是怎么找到 loadAddress 呢,有知道的吗

同文,收集到的只有uuid和offset,没有loadAddress,那么就没有 instructionAddress(0x3E9),那咋用atos命令符号化出来呢

liu3399shuai avatar Dec 04 '20 02:12 liu3399shuai

loadAddress在app运行的时候可以通过代码读取的到的, matrix已经有工具类可以直接读取

let util = WCCrashReportInfoUtil.sharedInstance() as! WCCrashReportInfoUtil let images = util.getBinaryImages() ?? []

KorolZhu avatar Dec 05 '20 09:12 KorolZhu

loadAddress在app运行的时候可以通过代码读取的到的, matrix已经有工具类可以直接读取

let util = WCCrashReportInfoUtil.sharedInstance() as! WCCrashReportInfoUtil let images = util.getBinaryImages() ?? []

正解,可以自己修改代码将image_load信息写入上报信息中。然后自己写脚本拼装atos命令

WallfacerMajor avatar Dec 17 '20 11:12 WallfacerMajor

offset 已经有了,loadAddress 可以直接写 __PAGEZERO 的大小,arm64 下是:0x100000000,非 arm64 下是:0x4000,也就是说,可以这样解析: atos -o [dwarf文件地址] -arch arm64 -l 0x100000000 0x100000000+offset

gl-lei avatar Nov 30 '22 13:11 gl-lei