ios手动符号表解析

//
//  ViewController.m
//  demo
//
//  Created by
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建按钮
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeSystem];
    
    // 设置按钮的标题
    [myButton setTitle:@"点击我" forState:UIControlStateNormal];
    
    // 设置按钮的位置和大小
    myButton.frame = CGRectMake(100, 100, 100, 50); // (x, y, width, height)
    
    // 设置按钮的目标动作(点击事件处理器)
    [myButton addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
    
    // 将按钮添加到视图
    [self.view addSubview:myButton];
}

// 定义点击事件处理器
- (void)buttonTapped:(UIButton *)sender {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths firstObject];
    NSLog(@"Documents Directory: %@", documentsDirectory);
    NSArray *array= @[@"a",@"b",@"c"];
    [array objectAtIndex:5];
    NSLog(@"按钮被点击了!");
}

@end

模拟崩溃数组越界

获取崩溃信息

4   demo       0x0000000103164eb2

获取Binary Images:

0x103163000 -  0x103166fff hello.demo (1.0) <d202e08b-6dd8-3a73-83c8-e7019fe049b3>

内存地址(Memory Address):内存中每个数据单元的唯一标识符,用于在运行时访问数据,即 0x0000000103164eb2

基地址(Base Address):内存块或内存区域的起始地址,用于表示数据段或代码段的起始位置。即 0x103163000

结束地址(End Address):内存块或内存区域的终止地址,用于表示该内存块的范围。即 0x103166fff

计算偏移量

0x0000000103164eb2 - 0x103163000 = 4346760882 - 4346753024 = 7858

获取符号表 路径是 Xcode > Preferences > Locations 下的 Derived Data

demo.app.dSYM

解析来根据偏移量 7858 获取符号表中的原始行

1e8b	1e9c	-[ViewController buttonTapped:]	ViewController.m:40
1e9c	1ea0	-[ViewController buttonTapped:]	ViewController.m:41
1ea0	1eba	-[ViewController buttonTapped:]	ViewController.m:41
1eba	1ec8	-[ViewController buttonTapped:]	ViewController.m:42

16进制转换10进制展示

7819 7835 -[ViewController buttonTapped:]	ViewController.m:40
7836 7839 -[ViewController buttonTapped:]	ViewController.m:41
7840 7865 -[ViewController buttonTapped:]	ViewController.m:41
7866 7879 -[ViewController buttonTapped:]	ViewController.m:42

7858 在 (7866,7879) 这个区间内 为

7840 7865 -[ViewController buttonTapped:]	ViewController.m:41

再来看原始代码行号,验证找到的是正确的

解析符号表使用bugly提供的jar执行,即可

java_opts=" -Xms512m -Xmx1024m -Dfile.encoding=UTF8 "
jar_path = "buglySymboliOS.jar"
fils_path = "demo.app.dSYM"
output_path = "~/Downloads/ios"
java $java_opts -jar $jar_path -i $file_path -o $output_path -symbol "$@" > /dev/null 2>&1

最后需要符号还原

pip install symbolic==8.3.2

from symbolic.demangle import demangle_name

decode = demangle_name(item)
相关推荐
刘小哈哈哈18 小时前
iOS 提取图片的主题色,并支持灵活提取
macos·ios·cocoa
程序员大侠18 小时前
JSPatch和JSBridge 的区别
ios·热更新
奇客软件1 天前
如何像专家一样修复任何 iPhone 上的“iPhone 已禁用”错误
数据库·深度学习·ios·电脑·笔记本电脑·iphone·学习方法
Zender Han1 天前
如何在 Flutter 中实现可拖动的底部弹出框
android·flutter·ios
GEEKVIP2 天前
如何从 Mac 上清空的垃圾箱中恢复已删除的文件
windows·macos·ios·智能手机·电脑·笔记本电脑·iphone
文件夹__iOS2 天前
[SwiftUI 开发] @dynamicCallable 与 callAsFunction:将类型实例作为函数调用
ios·swiftui·swift
鸽芷咕2 天前
【C++报错已解决】std::ios_base::sync_with_stdio
开发语言·c++·ios·bug
人工智能的苟富贵2 天前
全面解析 iOS 和 Android 内嵌 H5 页面通信与交互实现方案
android·javascript·ios·交互
Se7en丶潇洒哥2 天前
Xcode 16 上传AppStore遇到第三方库 bitcode 的问题
ios·xcode·appstore·xcode 16·bitcode
鸽芷咕2 天前
【C++报错已解决】std::ios_base::floatfield
开发语言·c++·ios