web-dev-qa-db-ja.com

objdumpはどのようにして-Sオプションでソースコードを表示しますか?

バイナリのソースファイルへの参照はありますか?バイナリで文字列を実行しようとしましたが、リストされているソースファイルへの参照が見つかりませんでした...

26
anon

objdumpは、ソースファイル名を参照するバイナリにコンパイルされたDWARFデバッグ情報を使用します。バイナリがデバッグ情報を使用してコンパイルされていない場合、またはobjdumpがソースファイルを見つけられない場合は、出力にソースコードが表示されず、アセンブリのみが表示されます。

DWARFは圧縮を使用するため、バイナリでstringsを使用してもソースファイル名は表示されません。

29
caf

バイナリのドワーフ情報は、命令(実際には命令ポインタまたはIP)とソースファイルおよび行番号の間のマッピングを格納します。ソースファイルは完全なパスを使用して指定されるため、バイナリを移動した場合でもソースファイルを見つけることができます。この情報を表示するには、objdump --dwarf=decodedline <binary>を使用できます(バイナリコースは-gでコンパイルする必要があります)。

objdump -S <binary>と言うと、このドワーフ情報を使用して、ソースコードと逆アセンブリを提供します。

10
vkrnt

私の理解では、objdumpがバイナリコードのソースコードを表示するには、前提条件があります。DWARFデバッグ情報をバイナリにコンパイルする必要があります。 (沿って gcc -g sourcefileまたはgcc -gdwarf-2 sourcefile)そして、このDWARF情報を処理することにより、objdumpは、@ vlcekmi3と@vkrntが回答したソースコードを取得できます。

3
JerseyGood