一個棧幀的架構(gòu)如下(從上往下,地址下降):
????????PC
????????LR
????????SP
fp-->? FP
我們要回溯整個函數(shù)調(diào)用結(jié)構(gòu)時,只要遞歸讀取fp 和sp內(nèi)容即可
可以定義這樣一個結(jié)構(gòu)體
{
????previous? //4個字節(jié)
????return_addr?//4個字節(jié)
} frame
這種結(jié)構(gòu)在棧去的存儲如下:
return_addr? //對應(yīng)的sp
previous? ?//對應(yīng)的就是fp
最后遞歸從fp(首次為crash 后得到值)地址處往frame里面寫入8個字節(jié)內(nèi)容就可以了刻像,
每個frame里面return_addr值為一條調(diào)用記錄的函數(shù)入口地址,拿到地址就可以去符號化了同仆。
寫的有點粗糙,修正中....裙品,有問題可以留言
思考:
1俗批,函數(shù)參數(shù)怎么傳遞,參數(shù)個數(shù)大于4個和小于4個有什么區(qū)別
2市怎,信號量異常傳遞鏈需要注意什么岁忘,怎么規(guī)避其它crash sdk搶占問題