0

1)首先我想知道,如何解碼這樣的變量?在GDB中優化值:gdb可以自動解碼它嗎?

我知道這個問題的解決方案,刪除優化標誌,使其不穩定,我不想做這一切。有沒有解決方案可以完成而無需再次編譯源代碼?問題是,每當我做出任何更改,需要很長時間才能編譯,所以我不想用不同的優化標記進行編譯,也嘗試了一次更改優化標記,但由於編譯標記的更改而崩潰我無法理解。

此外,當我做「info reg」時,我無法找到有關了解各種寄存器的文檔。我期待着一些變量(我知道它的價值,它會是什麼),但信息註冊表顯示我所有不同的價值。我在這裏錯過了一些東西。我正在使用的體系結構是x86_64

2)我想知道gdb在解碼這些寄存器變量時面臨的限制是什麼?或者這個問題已經被某人解決了。我已經閱讀了很多經過彙編代碼的地方,你可以找出哪個變量在該寄存器中。如果那是真的,爲什麼它不能被構建到gdb中。如果有解決這個問題的請給我指點相關頁面

+0

這裏唯一的問題是「我想知道什麼是限制」和「請指點我的相關頁面」。你還沒有描述過一個問題,這些都是非常模糊和開放式的問題,並不能真正解決問題。其他人可能會不同意,但我正在投票結束。 – abelenky

+0

對不起,我不明白。我的基本問題是如何找出經過優化的變量的值。我知道這個問題的解決方案,刪除優化標誌,使其變得不穩定,我不想做所有這些。有沒有解決方法可以在不編譯源代碼的情況下完成?您可以假設該庫是我無法訪問的第三方代碼。我還應該描述什麼?那肯定會有一些gdb面臨的問題,因爲它不能顯示這樣的變量。這就是我所說的「限制」。 – avd

+0

你的評論是MILES遠離你原來的職位。在你的評論中,你問:「我如何找出這樣一個優化出來的變量的值?」。 (這是一個真正的問題,不像你原來的帖子)。 你也描述了這些限制(「圖書館是我沒有訪問權限的第三方代碼」「是否有任何解決方案可以在不編譯源代碼的情況下完成?」),您在原始文章中忽略了這些限制。我建議你編輯你的問題以包含這些信息。 – abelenky

回答

0

你看過編譯你的代碼未優化嗎?

嘗試在你的gcc選擇其中之一:

-Og 
    Optimize debugging experience. -Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience. 


-O0 
    Reduce compilation time and make debugging produce the expected results. This is the default. 
+0

感謝您的答案,但我只是更新了我的問題,我不想這樣做:) – avd

+0

如果庫是第三方代碼,你沒有訪問,你怎麼做任何調試呢?你暗示你有符號,並且可以查看變量和源代碼;但這與您無法訪問該圖書館的說法相矛盾。 – abelenky

+0

好的,讓我再解釋一下,就像我可以訪問源代碼一樣,但是每當我做出改變時都需要很長時間才能編譯。所以我想,不要包含太多的細節,我只會說這個。 – avd

1

如果沒有源和調試編譯/不優化,你能做的最好的將是(即第三方代碼。)反彙編代碼並嘗試確定變量的存儲方式。

在GDB中disassemble指令將傾大會對給定函數:

disassemble <function name> 

或者,如果符號被剝奪

disassemble <address> 

其中<address>是入口點函數。

您可能還需要檢查函數的調用位置,以確定使用的調用約定。

一旦你找出了函數和變量佈局(堆棧變量或寄存器)的結構,在調試時可以通過nextistepi逐步執行每條指令,並觀察如何通過轉儲內容來改變變量中的值寄存器或內存位置。

我自己也不知道任何好的底漆或教程,但this question and its answers可能對您有用。就我個人而言,我發現自己最引用英特爾手冊。可以從英特爾網站下載pdf。我目前沒有方便的鏈接。如果別人也許可以更新我的答案。

+0

聽起來不錯。讓我嘗試。 – avd

+0

是否有關於讀取x86_64的彙編代碼的任何文檔?我知道我的學校對MIPS知識的基礎知識,但忘記了一些說明的含義。 – avd

+0

我沒有任何我熟悉的資源來推薦自己,但我更新了一些更多的信息。 –