手动解析App dSYM示例

article/2025/1/11 8:04:56

https://www.jianshu.com/p/c507f95646bd

前期准备

  1. 崩溃日志地址(涉及敏感数据已屏蔽)
  2. 对应app 的 dSYM文件,利用dwarfdump --uuid <file_to_detect>检测dSYM文件uuid和app执行文件uuid是否匹配
$ dwarfdump --uuid APP_BUNDLE_NAME.app.dSYMUUID: F181E27B-CE37-3525-93FD-DC3A16827D20 (armv7) APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME
UUID: 3D16DCD2-749C-3D41-BEF1-333E55AA28BB (arm64) APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME$ dwarfdump --uuid APP_BUNDLE_NAME/Payload/APP_BUNDLE_NAME.app/APP_BUNDLE_NAME UUID: F181E27B-CE37-3525-93FD-DC3A16827D20 (armv7) APP_BUNDLE_NAME/Payload/APP_BUNDLE_NAME.app/APP_BUNDLE_NAME
UUID: 3D16DCD2-749C-3D41-BEF1-333E55AA28BB (arm64) APP_BUNDLE_NAME/Payload/APP_BUNDLE_NAME.app/APP_BUNDLE_NAME

出错堆栈

0 libobjc.A.dylib   0x00000001941bbbdc objc_msgSend + 28
1 UIKit 0x00000001885f0f74 0x00000001881fc000 + 4149108
2 UIKit 0x00000001882e5bec 0x00000001881fc000 + 957420
3 UIKit 0x00000001882e5960 0x00000001881fc000 + 956768
4 UIKit 0x00000001882ec5e0 0x00000001881fc000 + 984544
5 UIKit 0x00000001882095f8 0x00000001881fc000 + 54776
6 UIKit 0x000000018822aa34 0x00000001881fc000 + 191028
7 UIKit 0x0000000188209310 0x00000001881fc000 + 54032
8 UIKit 0x0000000188209310 0x00000001881fc000 + 54032
9 UIKit 0x000000018822aa34 0x00000001881fc000 + 191028
10 UIKit    0x0000000188209310 0x00000001881fc000 + 54032
11 UIKit    0x0000000188209310 0x00000001881fc000 + 54032
12 UIKit    0x0000000188209310 0x00000001881fc000 + 54032
13 UIKit    0x0000000188209310 0x00000001881fc000 + 54032
14 UIKit    0x0000000188209310 0x00000001881fc000 + 54032
15 UIKit    0x0000000188209310 0x00000001881fc000 + 54032
16 UIKit    0x00000001882089e0 0x00000001881fc000 + 51680
17 Foundation   0x0000000184891908 0x000000018483c000 + 350472
18 UIKit    0x00000001882088a0 0x00000001881fc000 + 51360
19 UIKit    0x00000001882143a0 0x00000001881fc000 + 99232
20 UIKit    0x00000001883000b0 0x00000001881fc000 + 1065136
21 UIKit    0x0000000188344128 0x00000001881fc000 + 1343784
22 UIKit    0x00000001883439f0 0x00000001881fc000 + 1341936
23 UIKit    0x000000018840d5c4 0x00000001881fc000 + 2168260
24 UIKit    0x0000000188241418 0x00000001881fc000 + 283672
25 UIKit    0x000000018840d430 0x00000001881fc000 + 2167856
26 UIKit    0x0000000188241418 0x00000001881fc000 + 283672
27 UIKit    0x000000018822a52c 0x00000001881fc000 + 189740
28 UIKit    0x000000018840d068 0x00000001881fc000 + 2166888
29 UIKit    0x0000000188241418 0x00000001881fc000 + 283672
30 UIKit    0x000000018822a52c 0x00000001881fc000 + 189740
31 UIKit    0x0000000188240db4 0x00000001881fc000 + 282036
32 UIKit    0x0000000188200750 0x00000001881fc000 + 18256
33 CoreFoundation   0x0000000183a16a50 0x0000000183938000 + 911952
34 CoreFoundation   0x0000000183a139dc 0x0000000183938000 + 899548
35 CoreFoundation   0x0000000183a13dbc 0x0000000183938000 + 900540
36 CoreFoundation   0x00000001839410a4 CFRunLoopRunSpecific + 396
37 GraphicsServices 0x000000018cadb5a4 GSEventRunModal + 168
38 UIKit    0x0000000188272aa4 UIApplicationMain + 1488
39 APP_BUNDLE_NAME  0x0000000100327938 0x00000001000a0000 + 2652472
40 libdyld.dylib    0x0000000194816a08 0x0000000194814000 + 10760

分析数据

  • Stack Address(栈地址): 0x0000000100327938
  • Load Address(首地址): 0x00000001000a0000
  • Slide Value(32位虚拟地址): 0x00004000
  • Slide Value(64位虚拟地址): 0x0000000100000000
  • Symbol Offset(偏移量): 2652472
  • File Address(32位文件地址): 0x28B938
  • File Address(64位文件地址): 0x100287938

注意虚拟地址区分32位(LC_SEGMENT)和64位(LC_SEGMENT_64)段的不同

数据关系说明

数据关系说明

获取虚拟地址

对于 ATOS,它会主动帮你计算虚拟地址,只要你提供了首地址和栈地址;对于 dwarfdumplldb 而言,它们需要使用文件地址,所以还需要虚拟地址。我们可以使用 otool来获取 dSYM 文件中的虚拟地址。

$ otool -l APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME...
Load command 3cmd LC_SEGMENTcmdsize 736segname __TEXTvmaddr 0x00004000vmsize 0x00c3c000fileoff 0filesize 0maxprot 0x00000005initprot 0x00000005nsects 10flags 0x0...
Load command 3cmd LC_SEGMENT_64cmdsize 952segname __TEXTvmaddr 0x0000000100000000vmsize 0x0000000000d94000fileoff 0filesize 0maxprot 0x00000005initprot 0x00000005nsects 11flags 0x0...

使用ATOS进行符号化

atos -arch \<architecture\> -o \<binary filename\> -l \<load address\> \<stack address 1\> \<stack address 2\> ...

$ atos -arch arm64 -o APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME 
-l 0x00000001000a0000 0x0000000100327938main (in ) (main.m:14)

使用lldb进行符号化

(lldb) target create --arch arm64 ./APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAMECurrent executable set to './APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME' (arm64).(lldb) image lookup --address 0x100287938Address: APP_BUNDLE_NAME[0x0000000100287938] (APP_BUNDLE_NAME.__TEXT.__text + 2632468)Summary: APP_BUNDLE_NAME`main + 88 at main.m:14

使用dwarfdump进行符号化

$ dwarfdump --lookup 0x100287938 --arch arm64 APP_BUNDLE_NAME.app.dSYM----------------------------------------------------------------------File: APP_BUNDLE_NAME.app.dSYM/Contents/Resources/DWARF/APP_BUNDLE_NAME (arm64)
----------------------------------------------------------------------
Looking up address: 0x0000000100287938 in .debug_info... found!0x002942c4: Compile Unit: length = 0x0000024d  version = 0x0002  
abbr_offset = 0x00000000  addr_size = 0x08  (next CU at 0x00294515)0x002942cf: TAG_compile_unit [106] *AT_producer( "Apple LLVM version 8.1.0 (clang-802.0.38)" )AT_language( DW_LANG_ObjC )AT_name( "/Users/user/APP_PROJECT_NAME/APP_PROJECT_NAME/main.m" )AT_stmt_list( 0x00128d9d )AT_comp_dir( "/Users/user/APP_PROJECT_NAME" )AT_APPLE_optimized( 0x01 )AT_APPLE_major_runtime_vers( 0x02 )AT_low_pc( 0x00000001002878d8 )AT_high_pc( 0x0000000100287960 )0x00294480:     TAG_subprogram [226] *AT_low_pc( 0x00000001002878e0 )AT_high_pc( 0x0000000100287960 )AT_frame_base( reg29 )AT_name( "main" )AT_decl_file( "/Users/user/APP_PROJECT_NAME/APP_PROJECT_NAME/main.m" )AT_decl_line( 12 )AT_prototyped( 0x01 )AT_type( {0x002944c7} ( int ) )AT_external( 0x01 )AT_APPLE_optimized( 0x01 )
Line table dir : '/Users/user/APP_PROJECT_NAME/APP_PROJECT_NAME'
Line table file: 'main.m' line 14, column 16 with start address 0x0000000100287924Looking up address: 0x0000000100287938 in .debug_frame... not found.



 

 

 

 


http://chatgpt.dhexx.cn/article/8VvHHQ5R.shtml

相关文章

dSYM介绍

在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件. 他是一个编译的中转文件,简单说就是debug的symbols包含在这个文件中. 他有什么作用? 当release的版本 crash的时候,会有一个日志文件,包含出错的内存地址,使用symbolicatecrash工具能够把日志和dSYM文件转换成可以阅读的…

dSYM文件分析

dSYM 文件 什么是 dSYM 文件 Xcode编译项目后&#xff0c;我们会看到一个同名的 dSYM 文件&#xff0c;dSYM 是保存 16 进制函数地址映射信息的中转文件&#xff0c;我们调试的 symbols 都会包含在这个文件中&#xff0c; 并且每次编译项目的时候都会生成一个新的 dSYM 文件&am…

iOS dSYM详解和分析crash,ips文件

1.什么是dSYM文件 dSYM 文件是Xcode编译后&#xff0c;我们会看到一个同名的 dSYM 文件&#xff0c;dSYM 是保存 16 进制函数地址映射信息的中转文件&#xff0c;存储应用程序的调试 symbols。每次编译项目或者打包的时候都会生成一个新的 dSYM 文件&#xff0c;当我们软件rel…

Xcode骚操作之:解决报错 MapFileParser.sh: Permission denied

MapFileParser.sh: Permission denied Unity项目&#xff0c;需要用Xcode运行&#xff0c;结果报了错误。 解决方案&#xff1a; 1、启动台》其它》选择 终端 &#xff0c;输入以下命令&#xff1a; chmod空格x空格拖拽这个文件到小黑框 回车 注意&#xff1a;chmod x的意思…

ipa重签名的四种方式

文章为学习hank的视频笔记 一 开发者调试安装app到手机的签名过程 1. Mac电脑生成公钥M和私钥M 2. 公钥M传给苹果服务器,苹果服务器的私钥A对公钥M进行加密生成证书返回给xcode 3. Xcode下载profile等描述文件,用公钥M对app进行加密生成app签名,然后把app签名和证书以及p…

闲聊扯淡 | 微信8.0背景视频合集,笑死我了

微信 8.0 更新已经有几天了&#xff0c;最开始现在 IOS 端推行&#xff0c;昨天在安卓端也可以更新了&#xff0c;没有更新的小可爱快去更新试试吧。 除了重新高清化的表情以及衍生的表情包大战外&#xff0c;各种新玩法也被不断挖掘出来。 值得一提的就是微信 8.0 中是支持视频…

Unity简单操作:获取 apk在 苹果平台 或者 安卓平台,它自身的包名

在运行时返回应用程序标识。在 Apple 平台上为保存在 info.plist 文件中的“bundleIdentifier”&#xff0c;在 Android 平台上为 AndroidManifest.xml 中的“package”。(com.xxxx.xxxx)

iOS 多线程和GCD(Grand Central Dispath) 教程 (一)

iOS 多线程和GCD(Grand Central Dispath) 教程 &#xff08;一&#xff09; 本文翻译自 Ray Wenderlich 的博客 点击打开原文链接。全部由本人亲手翻译...童叟无欺~ 你有木有遇见过这样的情况&#xff0c;当你在写app的时候&#xff0c;有时候界面就卡住了&#xff0c;要等很长…

iOS【开发热门游戏_超级猜图Demo】

先看效果图 思路 需求分析 1&#xff0c;搭建界面 1》上半部分&#xff0c;固定的&#xff0c;用Storyboard直接连线(OK) 2》下半部分&#xff0c;根据题目的变化&#xff0c;不断变化和调整&#xff0c;用代码方式实现比较合适(OK) *备选按钮区域(OK) *答案按钮区域(OK)…

unity骚操作之: 解决AVPro Video在安卓移动端播放不了SteramAssecting里面的视频 或者 URL视频

Unity自带VideoPlay用来播放视频有bug,在移动端测试无法正常使用Url播放,所以找到AVProVideo,这个插件很好用,移动端亲测可用,功能也全,这里记录下使用心得 下载地址:支持Unity2019及以上版本AVProVideo1.11.5视频播放插件.zip_avpro安卓11不能播放-C#文档类资源-CSDN下…

unity普通操作:animator播放,暂停,判断播放完成【(增加1个判断如果这个是动画融合的情况)】

1.播放&#xff0c;暂停 anim.CrossFade("s2", 0); anim.speed0&#xff1b;//暂停 anim.speed1&#xff1b;//播放 判断播放完成&#xff08;Update方式&#xff09; void Update(){AnimatorStateInfo stateinfo2 anim.GetCurrentAnimatorStateInfo(0);//判断…

猫猫学IOS(五)UI之360等下载管理器九宫格UI

猫猫分享&#xff0c;必须精品 素材下载地址&#xff1a;http://blog.csdn.net/u013357243/article/details/44486651 先看效果 主要是完成了九宫格UI的搭建 代码 - (void)viewDidLoad {[super viewDidLoad]; //九宫格中每个格子的宽 #define kAppViewW 80 //九宫格中每个格…

猫猫学IOS(七)UI之UITextField代理事件_类似QQ登陆窗口的简单实现

猫猫分享&#xff0c;必须精品 素材代码地址: http://blog.csdn.net/u013357243/article/details/44587005 原文地址&#xff1a;http://blog.csdn.net/u013357243/article/details/44571163 先看效果图&#xff1a; 学习代码 // // NYViewController.m // 05-UITextFie…

国行Apple Watch 开启 ECG 心电图功能

国行Apple Watch 开启 ECG 心电图功能 设备要求 1.iphone 升级到最新系统 2.apple watch 升级到最新系统 3.最好有一台备用iphone来保证数据不被泄露 开通原理 1.我们需要有一个已开通ECG功能的appleId 2.登录此appleId到设备 3.同步健康App数据到本地 4.退出账号 5.登…

iOS开发:面向协议编程与 Cocoa 的邂逅 (上)

//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄 喵神原文地址&#xff1a;https://onevcat.com/2016/11/pop-cocoa-1/ 本文是笔者在 MDCC 16 (移动开发者大会) 上 iOS 专场中的主题演讲的文字整理。您可以在这里找到演讲使用的 Keynote&#xff0c;部分示例代码可以在 MDCC …

猫猫学IOS(十三)UI之UITableView学习(下)汽车名牌带右侧索引

猫猫分享&#xff0c;必须精品 素材代码地址&#xff1a;http://blog.csdn.net/u013357243/article/details/44727225 原文地址&#xff1a;http://blog.csdn.net/u013357243?viewmodecontents 先看效果图 代码 ViewController //ps&#xff1a;新建iOS交流学习群&#xf…

在android上模拟ios阴影效果

update一下&#xff0c;下面方法现在来看很low&#xff0c;其实最简单的是直接自定义一个drawable android上大部分时候阴影是不符合产品需求的&#xff0c;就比如我们就要求实现一个类似ios的圆形图片的阴影??? cardview阴影就挺好&#xff0c;可是他喵了个咪的&#xff0…

猫猫学IOS(六)UI之iOS热门游戏_超级猜图

猫猫分享&#xff0c;必须精品 素材地址:http://blog.csdn.net/u013357243/article/details/44539069 原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;翟乃玉的博客 地址&#xff1a;http://blog.csdn.net/u013357243?viewmodecontents 先看效果图 思路 需求分析…

iOS汇编基础(二)寄存器

以arm64为例 xcode调试汇编1. xcode 查看运行时的汇编代码 debug -> debug workflow -> always show disassembly 2. Xcode改变pc值 register write pc 0x1005d6928 3. 单步运行一步汇编代码:ni 4. 读取某个寄存器 (lldb) register read x0x0 = 0x0000000000000000…

Unity简单操作: DoTween的onCom..回调函数里面执行错误 不返回哪条函数出错的解决方案,与iOS平台为什么需要勾选安全模式

目录 DoTween的onCom..回调函数里面执行错误 不返回哪条函数出错的解决方案 当然 在iOS平台 测试好了的话 需要勾选它&#xff0c;不然iOS机制原因 会导致onComxx回调 没有执行&#xff01; DoTween的onCom..回调函数里面执行错误 不返回哪条函数出错的解决方案 如下图&…