在我們開發過程中,遇到最頭疼的問題莫過于程序跑飛了,無法有效定位出問題出在哪里,通過CPU體系結構的知識,我們可以通過上某些特殊狀態寄存器找到出問題在哪一行代碼,但是卻不清楚經歷了什么樣的計算流程導致了該問題,通過棧回溯的方式有可能找到一些蛛絲馬跡。
???? 以main->example->add舉例,如下圖函數

通過C代碼調用關系看反匯編代碼



通過上圖的反匯編代碼可以得到各個局部變量在棧里面的內容如下圖(PS:通常CPU棧的生長方向為向下即高地址往低地址增長),通過棧memory里面的信息可以推斷出當時計算的中間過程。其中,ra(return address)等同于ARM中lr寄存器,用于找到調用關系,RISC-V棧保持16字節對齊(為了兼容未來的128bit CPU)。

關注公眾號,加星標,回復1024獲取學習資料,每天進步一點點。
聲明:
本號原創、轉載的文章、圖片等版權歸原作者所有,如有侵權,請聯系刪除。
關注、點贊、在看、轉發,支持優質內容!
?