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)
相关推荐
2501_915921436 小时前
iOS 虚拟位置设置实战,多工具协同打造精准调试与场景模拟环境
android·ios·小程序·https·uni-app·iphone·webview
QuantumLeap丶6 小时前
《Flutter全栈开发实战指南:从零到高级》- 11 -状态管理Provider
android·flutter·ios
2501_916008896 小时前
App 上架需要什么?从开发者账号到开心上架(Appuploader)免 Mac 上传的完整流程指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
QuantumLeap丶1 天前
《Flutter全栈开发实战指南:从零到高级》- 09 -常用UI组件库实战
flutter·ios·dart
2501_915918411 天前
App 上架苹果商店全流程详解 从开发者账号申请到开心上架(Appuploader)跨平台免 Mac 上传实战指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
2501_916007471 天前
从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
android·学习·ios·小程序·uni-app·iphone·xcode
Pluto5381 天前
第一个app产品的迭代
ios·github
2501_915921431 天前
iOS 26 CPU 使用率监控策略 多工具协同构建性能探索体系
android·ios·小程序·https·uni-app·iphone·webview
狂团商城小师妹1 天前
JAVA国际版同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5
android·java·ios·小程序·交友
游戏开发爱好者81 天前
iOS 应用逆向对抗手段,多工具组合实战(iOS 逆向防护/IPA 混淆/无源码加固/Ipa Guard CLI 实操)
android·ios·小程序·https·uni-app·iphone·webview