iOS signal crash 堆栈获取符号化

一个栈帧的架构如下(从上往下,地址下降):

        PC

        LR

        SP

fp-->  FP


我们要回溯整个函数调用结构时,只要递归读取fp 和sp内容即可

可以定义这样一个结构体

{

    previous  //4个字节

    return_addr //4个字节

} frame

这种结构在栈去的存储如下:

return_addr  //对应的sp

previous   //对应的就是fp

最后递归从fp(首次为crash 后得到值)地址处往frame里面写入8个字节内容就可以了,

每个frame里面return_addr值为一条调用记录的函数入口地址,拿到地址就可以去符号化了。

写的有点粗糙,修正中....,有问题可以留言

思考:

1,函数参数怎么传递,参数个数大于4个和小于4个有什么区别

2,信号量异常传递链需要注意什么,怎么规避其它crash sdk抢占问题

你可能感兴趣的:(iOS signal crash 堆栈获取符号化)