atos解析dyms

252 阅读2分钟

1.获取UUID与结构信息

 xcrun dwarfdump --uuid /Users/xxx/Library/Developer/Xcode/Archives/2021-10-11/TestApp\ 2021-10-11,\ 10.34.xcarchive/dSYMs/TestApp.app.dSYM
2021-10-15 14:41:11.374 xcodebuild[2164:25794] [MT] PluginLoading: Required plug-in compatibility UUID F56A1938-53DE-493D-9D64-87EE6C415E4D for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs
UUID: 3363CCDF-9E2D-32C8-B6B6-52094B697CDA (x86_64) /Users/xxx/Library/Developer/Xcode/Archives/2021-10-11/TestApp 2021-10-11, 10.34.xcarchive/dSYMs/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp
UUID: 970C1C57-E2C9-3749-9381-16BB721BEAA7 (arm64) /Users/xxx/Library/Developer/Xcode/Archives/2021-10-11/TestApp 2021-10-11, 10.34.xcarchive/dSYMs/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp

包含两种架构x86-64与arm64,

2.找到虚拟地址开始点

在崩溃日志中搜索Binary Image,如下:

       0x101ddb000 -        0x10213afff +com.test.app (3.0.2.1 - 196) <3363CCDF-9E2D-32C8-B6B6-52094B697CDA> /Applications/TestApp.app/Contents/MacOS/TestApp
       0x102206000 -        0x102229fff +com.alamofire.AFNetworking (4.0.1 - 1) <07F6601D-C330-3CE3-B192-971EBD9B929D> /Applications/TestApp.app/Contents/Frameworks/AFNetworking.framework/Versions/A/AFNetworking
       0x10226e000 -        0x102275fff +org.cocoapods.CASLabel (0.1.5 - 1) <9B28AD95-556A-378F-9998-5FA1BC25F703> /Applications/TestApp.app/Contents/Frameworks/CASLabel.framework/Versions/A/CASLabel
       0x10228b000 -        0x1022bafff +org.cocoapods.CASSystemInfo (0.4.9 - 1) <5D947BBC-9F89-3307-94CC-80E4AE2F698D> /Applications/TestApp.app/Contents/Frameworks/CASSystemInfo.framework/Versions/A/CASSystemInfo
       0x1022f8000 -        0x102313fff +org.cocoapods.CocoaLumberjack (3.7.2 - 1) <999DAB55-42DB-3254-AE9F-38A930F691C0> /Applications/TestApp.app/Contents/Frameworks/CocoaLumberjack.framework/Versions/A/CocoaLumberjack
       0x102353000 -        0x102366fff +org.cocoapods.FMDB (2.7.5 - 1) <95D716EE-F8B1-3950-A2F0-858A0A87AF5B> /Applications/TestApp.app/Contents/Frameworks/FMDB.framework/

从上面得到虚拟地址起始点为0x101ddb000

3.进入atos交互模式

atos -arch x86_64 -o "xxxx.app.dSYM/Contents/Resources/DWARF/xxx" -l 0x101ddb000(基地址)

接下来输入程序运行的实际地址进行换算就可以了,atos 就会根据你的 dSym 文件把对应的代码显示出来了。

Thread 12 Crashed:: Dispatch queue: timer detect cable queue
 ....
4   com.test.app    	0x0000000101e41045 0x101ddb000 + 417861
5   com.test.app    	0x0000000101e41258 0x101ddb000 + 418392
6   com.test.app    	0x0000000101e3057f 0x101ddb000 + 349567
7   com.test.app    	0x0000000101ebdc11 0x101ddb000 + 928785
 ....

例如:0x0000000101ebdc11
注意:我cd进入了xxx.app.dSYM/Contents/Resources/DWARF/目录

atos -arch x86_64 -o "app name" -l 0x101ddb000
0x0000000101ebdc11
__58-[CASNetworkCableDetectionTools runDetectNetworkCableLoop]_block_invoke_2 (in CAZeroTrust) (CASNetworkCableDetectionTools.m:55)
0x0000000101e41045

因为是交互模式,你还可以继续输入其他地址,不需要重复执行命令。