iOS底层 - 符号解析(dSYM 系统符号)Go语言版本
前言
由于业务发展需要,公司自建了APM系统,考虑到性能问题,需要在Linux服务器上解析dSYM及系统库符号,于是便写了一个Go版本的atos工具。
dSYM解析
......func findLine(dwarfData *dwarf.Data, address uint64, entry *dwarf.Entry) (uint64,error) {var ErrUnknownLine = errors.New("ErrUnknownLine")var lineNumber uint64lineNumber = 0var lineReader *dwarf.LineReadervar theErr errorif lineReader, theErr = dwarfData.LineReader(entry); theErr != nil {log.Printf("findLine lineReader error")return 0,ErrUnknownLine}// findPCvar line2 dwarf.LineEntrylineNumber, err := ...(略)...if err != nil {log.Printf("lineReader findLine error")return 0,ErrUnknownLine}return lineNumber,nil}
......
详情请看源码
系统符号
提取符号
1.下载ipsw 文件
ipsw 固件下载地址: Firmware/iPhone
选择对应的版本包,例如
注意区分架构arm64/arm64e!!!(iPhoneXR之后的设备为arm64e架构)
2. 安装解析工具
安装解析命令工具 ipsw , 参考:Install - ipsw
|
3. 提取动态库缓存文件
动态库缓存文件名为 dyld_shared_cache_arm64 (或者 _arm64e 结尾)
|
执行后会在当前目录下生成一个包含缓存文件的文件夹,例如 18F72__iPhone13,2_3
4. 提取动态库
进入上一步生成的文件夹目录,创建存放动态库的目录,格式示例: 14.4.2_18D70 或者 14.4.2_18D70_arm64e
|
执行完成后,该文件夹包含系统符号文件,可用于符号解析。
5、按需提取高频次系统库
shell脚本提取系统库
解析系统符号
......for _, sym := range theFile.Symtab.Syms {currentDistance = ...(略)...if relativeAddress >= sym.Value && currentDistance <= bestDistance {bestDistance = currentDistancefmt.Println("Symbol: " + sym.Name)}}......
详情请看源码
iOS底层 - 符号解析(dSYM 系统符号)Go语言版本相关推荐
- 11. 符号和符号解析
11.1 符号及符号表 1. 符号的定义和引用 局部变量temp分配在栈中,不会在过程外被引用,因此不是符号定义 2. 连接符号的类型 (1)三种类型 每个可重定位目标模块m都有一个符号表,它包含了在 ...
- Simulink 环境基础知识(十六)--符号解析
目录 符号 符号解析过程 用符号表示数值 用符号表示其他值 限制信号解析 显式和隐式符号解析 符号 在创建 Simulink® 模型时,可以使用符号为模型中许多类型的实体提供值和定义.可以使用符号定义 ...
- 字节数组byte[]转有符号short和无符号unsignedShort
问题 项目为交通大数据相关,使用雷视一体机获取车辆实时信息,通过socket上报给平台 雷达会根据安装点的一个坐标为原点,构建自己的坐标系,记录车辆实时位置 雷达按照一定的通信协议,上报车辆编号.坐标 ...
- 目前市面上量化交易软件、平台、框架的特点, 重点推荐VNPY底层仿真回测系统
随着这几年量化交易在国内的快速发展,各种API接口.量化平台.量化交易框架匆匆推出,呈现出一片百花齐放,欣欣向荣的景象,但是由于目前国内还处于私募基金发展的初期,大部分平台也都匆匆上马,既有自己的特点 ...
- iOS之深入解析dyld与ObjC关联的底层原理
App启动与dylb加载 我们知道 dyld 的加载过程,即在 App 启动启动执行 main 函数之前,dylb 主要作了环境变量配置.共享缓存.主程序的初始化.插入动态库.链接主程序.链接动态库. ...
- iOS之深入解析类加载的底层原理:类如何加载到内存中
一.App 启动与 dylb 加载 App 启动会由 libdyld.dylib 库先于 main 函数调用 start,执行 _dyld_start 方法,然后运用汇编实现调用 dyldbootst ...
- (4.3)符号表和符号解析
符号表和符号解析 符号和符号表 符号解析 全局符号的强弱性 符号解析过程 与静态库的链接 符号和符号表 连接器需要使用符号表进行符号解析然后生成可执行文件,目标文件中通常有一个符号表,表中包含了在该文 ...
- 1. 系统符号与正则符号
系统符号与正则符号 系统符号 系统基础符号 基础正则符号 扩展正则符号 系统符号 系统基础符号 美元符号:$ · 用于取出变量中的内容· 表示用户命令提示符号普通用户为 $ (超级用户为 #)· 表示 ...
- Linux系统符号详解(所有用到的符号)
系统符号 基础符号 $ 取出变量中的内容 取出指定列的信息(awk) awk '{print $3}' /old.txt 取出第三列的信息 表示用户命令提示符号 表示一行的结尾 ! 表示取反或者排除 ...
- java系统界面找不到符号,找不到符号,java找不到符号
找不到符号,java找不到符号 找不到符号 找不到ntdll.pdb. *** ERROR: Symbolfile could not be found. Defaulted toexport sy ...
最新文章
- SpringBoot学习之路:09.Spring Boot中添加Filter应用
- windows7 下 安装ipython-5.1.0报错
- 【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
- wc 统计文件的行数
- 如何查看apache,php,mysql的编译参数
- mysql item_MySQL源代码:关于MySQL的Item对象
- 文件服务器的文件设置只读,服务器设置文件为只读
- 使用bind构建本地简易dns服务器
- clion stfp 配置
- python画cpk图_TensorFlow——Checkpoint为模型添加检查点的实例
- 安装配置NTP服务器
- 基于android7.1+msm8937充电学习---概述(1)
- Python400集大型视频,无偿分享,从正确方向学习python,全套python入门完整视频
- 2019最新黑客风云VIP 网站攻防安全课程(完整)
- 程序员如何优雅记笔记(Wiki、Typora、Markdown、坚果云)
- 远程调用中间件(RPC)
- 读书寄语之春天该很好,你若尚在场
- LSP 语言服务协议
- linux指定日期月末,linux 获取某个日期对应的月末日期方法
- Excel与bat批量生成文件夹,修改文件夹名称