前言

由于业务发展需要,公司自建了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

$ brew install blacktop/tap/ipsw

3. 提取动态库缓存文件

动态库缓存文件名为 dyld_shared_cache_arm64 (或者 _arm64e 结尾)

$ ipsw dyld extract iPhone13,2,iPhone13,3_14.6_18F72_Restore.ipsw

执行后会在当前目录下生成一个包含缓存文件的文件夹,例如 18F72__iPhone13,2_3

4. 提取动态库

进入上一步生成的文件夹目录,创建存放动态库的目录,格式示例: 14.4.2_18D70 或者 14.4.2_18D70_arm64e

$ ipsw dyld split <dyld_shared_cache> <目录名>    

示例:ipsw dyld split dyld_shared_cache_arm64 14.4.2_18D70

执行完成后,该文件夹包含系统符号文件,可用于符号解析。

5、按需提取高频次系统库

shell脚本提取系统库

解析系统符号

......for _, sym := range theFile.Symtab.Syms {currentDistance = ...(略)...if relativeAddress >= sym.Value && currentDistance <= bestDistance {bestDistance = currentDistancefmt.Println("Symbol: " + sym.Name)}}......

详情请看源码

iOS底层 - 符号解析(dSYM 系统符号)Go语言版本相关推荐

  1. 11. 符号和符号解析

    11.1 符号及符号表 1. 符号的定义和引用 局部变量temp分配在栈中,不会在过程外被引用,因此不是符号定义 2. 连接符号的类型 (1)三种类型 每个可重定位目标模块m都有一个符号表,它包含了在 ...

  2. Simulink 环境基础知识(十六)--符号解析

    目录 符号 符号解析过程 用符号表示数值 用符号表示其他值 限制信号解析 显式和隐式符号解析 符号 在创建 Simulink® 模型时,可以使用符号为模型中许多类型的实体提供值和定义.可以使用符号定义 ...

  3. 字节数组byte[]转有符号short和无符号unsignedShort

    问题 项目为交通大数据相关,使用雷视一体机获取车辆实时信息,通过socket上报给平台 雷达会根据安装点的一个坐标为原点,构建自己的坐标系,记录车辆实时位置 雷达按照一定的通信协议,上报车辆编号.坐标 ...

  4. 目前市面上量化交易软件、平台、框架的特点, 重点推荐VNPY底层仿真回测系统

    随着这几年量化交易在国内的快速发展,各种API接口.量化平台.量化交易框架匆匆推出,呈现出一片百花齐放,欣欣向荣的景象,但是由于目前国内还处于私募基金发展的初期,大部分平台也都匆匆上马,既有自己的特点 ...

  5. iOS之深入解析dyld与ObjC关联的底层原理

    App启动与dylb加载 我们知道 dyld 的加载过程,即在 App 启动启动执行 main 函数之前,dylb 主要作了环境变量配置.共享缓存.主程序的初始化.插入动态库.链接主程序.链接动态库. ...

  6. iOS之深入解析类加载的底层原理:类如何加载到内存中

    一.App 启动与 dylb 加载 App 启动会由 libdyld.dylib 库先于 main 函数调用 start,执行 _dyld_start 方法,然后运用汇编实现调用 dyldbootst ...

  7. (4.3)符号表和符号解析

    符号表和符号解析 符号和符号表 符号解析 全局符号的强弱性 符号解析过程 与静态库的链接 符号和符号表 连接器需要使用符号表进行符号解析然后生成可执行文件,目标文件中通常有一个符号表,表中包含了在该文 ...

  8. 1. 系统符号与正则符号

    系统符号与正则符号 系统符号 系统基础符号 基础正则符号 扩展正则符号 系统符号 系统基础符号 美元符号:$ · 用于取出变量中的内容· 表示用户命令提示符号普通用户为 $ (超级用户为 #)· 表示 ...

  9. Linux系统符号详解(所有用到的符号)

    系统符号 基础符号 $ 取出变量中的内容 取出指定列的信息(awk) awk '{print $3}' /old.txt 取出第三列的信息 表示用户命令提示符号 表示一行的结尾 ! 表示取反或者排除 ...

  10. java系统界面找不到符号,找不到符号,java找不到符号

    找不到符号,java找不到符号 找不到符号 找不到ntdll.pdb. *** ERROR: Symbolfile could not be found.  Defaulted toexport sy ...

最新文章

  1. SpringBoot学习之路:09.Spring Boot中添加Filter应用
  2. windows7 下 安装ipython-5.1.0报错
  3. 【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
  4. wc 统计文件的行数
  5. 如何查看apache,php,mysql的编译参数
  6. mysql item_MySQL源代码:关于MySQL的Item对象
  7. 文件服务器的文件设置只读,服务器设置文件为只读
  8. 使用bind构建本地简易dns服务器
  9. clion stfp 配置
  10. python画cpk图_TensorFlow——Checkpoint为模型添加检查点的实例
  11. 安装配置NTP服务器
  12. 基于android7.1+msm8937充电学习---概述(1)
  13. Python400集大型视频,无偿分享,从正确方向学习python,全套python入门完整视频
  14. 2019最新黑客风云VIP 网站攻防安全课程(完整)
  15. 程序员如何优雅记笔记(Wiki、Typora、Markdown、坚果云)
  16. 远程调用中间件(RPC)
  17. 读书寄语之春天该很好,你若尚在场
  18. LSP 语言服务协议
  19. linux指定日期月末,linux 获取某个日期对应的月末日期方法
  20. Excel与bat批量生成文件夹,修改文件夹名称

热门文章

  1. Linux下.run文件的安装和卸载
  2. 功率计量芯片HLW8012介绍与应用
  3. Postman 接口压力测试
  4. IDEA使用maven命令打包
  5. 最强下载神器IDM的安装和使用
  6. 从淘宝,天猫,1688,微店,京东,苏宁,淘特等其他平台一键复制商品到拼多多平台(批量上传宝贝详情接口教程)
  7. 阿里、美团内部大数据资料!果然牛逼!
  8. hadoop面试题(全)
  9. oracle 存档终点修改,修改归档模式的存档终点 archive log list
  10. 时间序列分类实践介绍(使用Python代码)