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