2012-01-24 21 views
5

如果我在(linux amd64).o文件上運行objdump -d,函數調用將顯示出來,而不會執行鏈接時間解析。例如:objdump和解析本地函數調用的鏈接?

90: 66 89 44 24 1c   mov %ax,0x1c(%rsp) 
    95: 44 89 74 24 10   mov %r14d,0x10(%rsp) 
    9a: e8 00 00 00 00   callq 9f <foo+0x9f> 
    9f: 83 f8 ff    cmp $0xffffffffffffffff,%eax 
    a2: 74 5e     je  102 <foo+0x102> 

函數內的一個分支正常顯示了,但callq只是存根放在鏈接器(帶4個字節的零供鏈接器將正確的地址進入)。

有沒有一種方法,沒有實際鏈接,以獲得一個函數名稱解析的彙編列表?我不關心最終會使用的地址,只是函數的名稱。該信息必須位於.o文件中,因爲鏈接程序必須使用它來完成其工作。

我問,因爲共享庫有問題的代碼進入約爲140MB,這需要一個很長時間上運行objdump的-d以解決他們的實際所有的函數調用來獲取ASM轉儲名。

+0

我想出了一個解決方法我的具體問題。我可以運行nm來獲取我們巨大的共享庫中的函數地址,然後使用nm輸出使用--start-address運行objdump。儘管如果可能的話,我仍然對原始問題的答案感興趣。 –

回答

12

有沒有一種方法,沒有實際鏈接,以獲得一個函數名稱解析的程序集清單?

是:使用objdump -dr foo.o