2012-01-24 18 views
5

(Linuxのamd64).oファイルでobjdump -dを実行すると、リンク時間の解決なしで関数呼び出しが表示されます。例:関数内の分岐は正しく示しているが、callqリンカーの中に入れるだけのスタブです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> 

(リンカために利用可能なゼロの4バイトとに適切なアドレスを入れて)。

実際にリンクせずに、関数名が解決されたアセンブリリストを取得する方法はありますか?私は、最終的に使用されるアドレス、機能の名前だけは気にしません。その情報は.oファイルになければなりません。なぜならリンカは仕事をするためにそれを消費しなければならないからです。

問題のコードはに入ることを共有ライブラリが140MB程度であるので、私が尋ねると、それは彼らの実際に解決すべての関数呼び出しとASMダンプを取得することに-d objdumpは実行するために長い時間がかかります名前。

+0

を使用しています。 nmを実行して巨大な共有ライブラリの関数アドレスを取得し、nm出力を使って--start-addressを指定してobjdumpを実行することができます。可能であれば、元の質問への答えにはまだ興味があります。 –

答えて

12

実際にリンクせずに、関数名が解決されたアセンブリリストを取得する方法はありますか?

はい:私は私の特定の問題の回避策を考え出したobjdump -dr foo.o

関連する問題