一个栈帧的架构如下(从上往下,地址下降):
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抢占问题