2011-02-03 158 views
0

如何檢查我的內存堆棧,堆棧等的哪些部分存在?我目前正在用C語言查看一個程序,並查看.elf文件,我可以看到該程序正在使用哪些內存地址,但我不知道它是堆棧還是堆棧。C中的內存分配

+0

您準確使用哪個平臺? – 2011-02-03 13:50:54

回答

3

這很難從編譯代碼本身的靜態分析中得知。您應該能夠看到任何靜態初始化數據區域以及靜態未初始化(BSS)部分,但是確切地說,如何將這些部分與堆棧,堆等加載到平臺的可執行加載器中。

0

如果您在嵌入式平臺上工作,您應該使用一些鏈接器腳本(lcf文件)以及構建程序,然後您可以詳細識別所有部分(堆棧,堆,intvec,bss,文本,代碼),它在存儲器中的位置(無論是在L1緩存,L2緩存還是DDR中)以及在加載到板子時的開始/結束地址。

問題是,請查看鏈接器手冊(可以在編譯器安裝目錄中找到它),以便正確理解lcf中的關鍵字。

此外還有一種方法可以分析各個部分,您可以爲您的項目創建「地圖文件」並通過它。它將列出程序中的所有部分及其地址。

0

你可以嘗試使用ollydbg,這是一個免費的調試器。一個缺點就是它以彙編形式顯示所有內容,但它會告訴你什麼是你的堆棧,堆,甚至是什麼在你的寄存器。我不確定這是不是你要找的。

+0

它支持所有平臺嗎? – 2011-02-07 04:04:29