美文网首页
符号化解析原理

符号化解析原理

作者: whlpkk | 来源:发表于2019-09-26 16:21 被阅读0次

最近研究了一下符号表解析的方法,这里记录一下。

一.获取偏移地址

这里先看一个崩溃的日志,如下:

崩溃日志 崩溃日志

如图,图1第7行,是对应工程名的一行,可以看到一共有3个数字

0x000000010516c414    //运行时的内存地址
0x102dc8000           //运行时的起始地址
37372948(0x23A4414)   //偏移地址
上面3个数字, 0x000000010516c414 = 0x102dc8000 + 37372948
这里,起始地址和内存地址都是运行是的,每次启动都会产生变化。
重要的是偏移地址37372948(0x23A4414),偏移地址是固定的。

二.确定符号表一致性

然后我们来说符号表文件,首页要确定符号表文件和崩溃日志是对应的,这里通过UUID来确定,崩溃日志的UUID就在图2的下面,符号表的UUID可以通过命令dwarfdump --uuid Your.app.dSYM获取。

UUID

三.读取符号表

这里使用MachOView打开符号表文件,这里我们使用的arm64架构,所以也以此架构来说明。首先查看__TEXTsegment的虚拟地址

TEXT

可以看到__TEXT的起始地址是0x0000000100000000,上面我们获取到的偏移地址是37372948(0x23A4414),相加,获得在代码段的虚拟地址为0x1023A4414

0x0000000100000000 + 37372948(0x23A4414) = 0x00000001023A4414

查找符号表,确定0x1023A4414所在位置

函数虚拟内存地址

查找得到0x1023A42BB < 0x1023A4414 < 1023A4F68,所以可知,函数名为__ZL19CLSTerminateHandlerv,因为这个类因为是第三方的framework,不是源码依赖,所以这里显示的有些异常.

0x1023A4414

四、崩溃堆栈

last

Last Exception Backtrace部分,最后的异常堆栈,一样可以像上面一样解析。上图可知,我们image的运行时内存地址是0x102dc8000 ~ 0x109d9bfff,通过对比,异常堆栈中的内存地址0x10787dbdc(第6个), 0x108a160e8(第9个)等等都在上述区间,这里使用0x108a160e8来作为例子解说。

0x108a160e8  这个就是上面说的运行时的内存地址
0x102dc8000 ~ 0x109d9bfff   这个就是运行时的起始地址和结束地址,这里的起始地址和上面的是同一个,是因为上面我们看的也是同一个image。
所以这里可以算出偏移量:  0x108a160e8 - 0x102dc8000 = 0x5C4E0E8
使用偏移量+__TEXT虚拟地址:  0x0000000100000000 + 0x5C4E0E8 = 0x105C4E0E8

这里得到函数的虚拟地址为0x105C4E0E8,同上面一样,查询可得

0x105C4E0E8

相关文章

  • 符号化解析原理

    最近研究了一下符号表解析的方法,这里记录一下。 一.获取偏移地址 这里先看一个崩溃的日志,如下: 如图,图1第7行...

  • 【iOS开发】Crash 文件解析

    一、Crash文件解析参考文章:iOS: Crash文件解析(一)分析iOS Crash文件:符号化iOS Cra...

  • 崩溃日志符号化

    方法一: 自动解析 参考:崩溃日志符号化-symbolicatecrash[http://www.cocoachi...

  • bugly的原理

    1.检测卡顿的原理 2.检测崩溃的原理 3.符号化 移动端监控体系之技术原理剖析[https://www.jian...

  • 从点击运行到显示画面经历的那些事

    只是介绍重点过程 预编译器符号化宏定义的展开import的展开 编译器语法和语义分析将符号化后的内容转化为一棵解析...

  • 学习资料汇总

    GeoHash核心原理解析 GeoHash算法学习讲解、解析及原理分析

  • iOS Crash符号化

    Crash符号化 通过Mac自带的命令行工具解析Crash文件需要具备三个文件 symbolicatecrash ...

  • SparseArray原理分析

    系列文章地址:Android容器类-ArraySet原理解析(一)Android容器类-ArrayMap原理解析(...

  • SparseIntArray原理分析

    系列文章地址:Android容器类-ArraySet原理解析(一)Android容器类-ArrayMap原理解析(...

  • Promise原理解析

    Promise原理解析 标签(空格分隔): Node.js Promise原理解析 简介 Promise 对象用于...

网友评论

      本文标题:符号化解析原理

      本文链接:https://www.haomeiwen.com/subject/xpikuctx.html