2015-12-23 79 views
1

我試圖從目標文件中提取信息,使用nm命令進行某種靜態代碼分析,其中我必須計算C代碼中聲明的變量和函數的數量。我已經通過了GNU Binutils的documentation。我可以在nm返回的符號表中找到在全局範圍聲明的變量,但是我找不到在本地範圍內聲明的變量。這是爲什麼?我怎樣才能訪問它?用`nm`命令列出局部變量

nm之外還有其他方法可以提取我想要的信息。作爲一個編譯器,gcc應該爲它的使用生成一個符號表。我可以通過任何gcc命令訪問它嗎?

回答

1

您不能從對象文件訪問局部變量,因爲gcc不保存關於它的信息。您只能使用nm來列出目標文件的符號表。這些符號表用於鏈接。鏈接時間不需要局部變量。結構和類的非靜態字段也是如此。

對於查看局部變量,gcc可能會編譯帶有特殊調試信息的程序。但是對於靜態分析的目的,你應該分析源代碼或對象文件中的機器碼。

+0

有沒有一種方法可以用gcc編譯,這樣就可以查看局部變量了? – taufique