2013-10-31 22 views
0

我有一個應用程序,我正在嘗試調試,但是在gdb下運行它會產生不同的結果,並且在遇到時它會輸出真正的符號信息與一個地址。例如。如何在正在運行的應用程序中編程查找符號

我有一個週期性調用的方法,我可以確定呼叫站點的地址。但是,我希望在運行時打印出此地址的符號信息。我知道我可以在可執行文件上運行「nm」,但不在應用程序中。我希望能夠從應用程序本身中完成。

我在Linux平臺上使用GCC 4.7.2。

(eddited解釋爲什麼我不能使用GDB)

+0

爲什麼不通過調試器運行應用程序,比如'gdb'? – Rerito

+0

我不想調試它。我想打印出調用方法的符號名稱 – ScaryAardvark

+0

這些方法還是這個C? – Joe

回答

1

動態符號信息可以通過DT_DYNAMIC段,其被加載到存儲器,並且可以通過詢問dlopen(3)用於句柄到主可執行訪問被訪問。

靜態符號信息只能從實際可執行文件或外部文件中讀取,因爲它未在可加載段中列出。

只有動態信息,您將無法解決任何未導出的問題,這意味着除非您的可執行文件已導出符號表,否則很可能只會看到庫調用,因此靜態信息可能是最佳選擇。

這涉及到很多解析,或者使用從binutils構建的bfd庫。

雖然,我真的很想知道這是否真的值得。您可能會從使用gcc中的分析支持中獲得相同的信息。

相關問題