[笔记分享] [Exception] 用户空间异常之Call Stack AP实现

从上一章分析可知,我们已经获取了call stack 的offset:

[笔记分享] [Exception] 用户空间异常之Call Stack AP实现

虽然得到了相对偏移,但是对于我们分析代码基本上还没什么用,因为咱们都是c代码嘛,所以要转换成c函数咯。

所以思路是这样子:

[笔记分享] [Exception] 用户空间异常之Call Stack AP实现

前面两步debuggerd已经帮我们完成了,而得到so的map我们目前只能在pc上完成,这个要借助objdump或者nm命令来完成map,手机上没这些命令。

另外,为了方便看log,我们将/data/tombstones目录下的文件按照时间规则来命名。将engrave_tombstone函数作如下改动就可以了。

[笔记分享] [Exception] 用户空间异常之Call Stack AP实现

AP实现

对于pc上的call stack转换ap实现也比较简单,按照上一节说的思路就可以了,这里将code贴出来,简单介绍下过程。

[笔记分享] [Exception] 用户空间异常之Call Stack AP实现

[笔记分享] [Exception] 用户空间异常之Call Stack AP实现

打开旧log文件,也就是从/data/tombstones下copy过来的文件,读取call stack的offset和所属的so名字,获取相应so的map表,查找offset从属于so中的哪个function,然后将这个function name一并写到新的log文件中。