2011-02-18 286 views
2

在DWARF2調試格式中,藉助.debug_frame部分中的CFI(調用幀信息)支持堆棧展開。這恰恰是一個表格,它爲每個寄存器在前一幀中保留一個規則來獲取它的值。但是,所有這些規則都依賴於寄存器在某個位置保存在堆棧中的事實。 當沒有幀指針時,在前一幀寄存器中獲取堆棧指針的值時不適用。在這種情況下,堆棧指針可能不會保存在堆棧上,而只是通過遞增和遞減值來進行管理。然而,dwarf2(或通常的矮小格式)沒有辦法指出寄存器值是一個表達式,而不是它的當前值。 所以,我的問題是,如何在使用dwarf2調試格式(當沒有幀指針存在時)在堆棧展開期間獲取堆棧指針的值。使用dwarf2獲取堆棧指針的堆棧指針值

-bV

回答

1

似乎dwarf3支持這種情況下的DW_CFA_val_offset。因此,這可以用來基於當前值的算術表達式來記錄前一幀中SP的值。 另一個可能的解決方案可能是將堆棧指針保存在堆棧本身上(將與dwarf2一起使用)。這可以在代碼效率並不那麼重要的-O0優化級完成。

0

this discussion上似乎是你的問題。 我不確定這些提案是否已經達到現行標準。

0

我去了這個討論。但是,只是想知道是否有人試圖通過其他方式解決問題。我能想到的一種方法是在堆棧本身上不必要地保存堆棧指針。然後使用此位置來獲取前一幀的sp值。