2017-10-06 62 views
1

我不確定我是否正確理解dds esp或其64位對應部分dqs rsp的原始輸出。當我看到堆棧中的條目列表時,我傾向於認爲,無論我看到返回地址的哪個位置,都是尚未返回的代碼調用。 IOW,將它們串在一起應該形成一個很好的調用堆棧。 (現在讓我們不用爲k*一組Windbg命令而煩惱。)情況並非總是如此嗎?Windbg上的'dds esp'

由於存在一些第三方擴展,它對esp/rsp輸出進行操作,並將條目串起來看起來像一個調用堆棧,但似乎無法與我看到的順序相匹配來源(呃,無論我有什麼資料來源)。甚至還有很久以前返回的函數。

我缺少什麼?

UPDATE:

行 - 我使用第三方擴展並說:

Dumps (dps) from the stack limit the base only showing items that include the ! followed by +0x

所以,問題就變成了是什麼該條目?我認爲這是一些函數的返回地址,正在修復以調用另一個函數?

回答

2

dds裝置d UMP d字(32位)和解釋結果作爲小號 ymbol。類似於dqs(四字,64位)和dps(指針大小,與架構匹配)。

如果您再次閱讀,您會發現符號作爲縮寫,而不是堆棧。如果可能,任何恰好在內存中的數字將被解釋爲符號。這可能是堆棧上的一個方法調用。它也可能是一個局部變量,它意外地具有與符號相匹配的值。

這些局部變量可能不會像對抗和ij也許floatdouble數據類型的變量,這是很難預測他們如何看起來像在內存中。此外,struct可能會有一個佈局,導致內存中的表示看起來像一個符號。

你提到的擴展似乎做了一個簡單的dps和沒有關聯符號的過濾行。

儘管您需要對應用程序的功能有很好的理解,即哪些符號可以位於調用堆棧中,哪些符號不在此處,但仍然可以在dps的堆棧損壞情況下使用。

+0

謝謝托馬斯。我想這意味着列出esp/rsp並不是線程是否執行特定函數的可靠指示器? (即通過某些符號名稱來尋找__函數地址)。 – ForeverLearning