バイナリのソースファイルへの参照はありますか?バイナリで文字列を実行しようとしましたが、リストされているソースファイルへの参照が見つかりませんでした...
objdump
は、ソースファイル名を参照するバイナリにコンパイルされたDWARFデバッグ情報を使用します。バイナリがデバッグ情報を使用してコンパイルされていない場合、またはobjdump
がソースファイルを見つけられない場合は、出力にソースコードが表示されず、アセンブリのみが表示されます。
DWARFは圧縮を使用するため、バイナリでstrings
を使用してもソースファイル名は表示されません。
バイナリのドワーフ情報は、命令(実際には命令ポインタまたはIP)とソースファイルおよび行番号の間のマッピングを格納します。ソースファイルは完全なパスを使用して指定されるため、バイナリを移動した場合でもソースファイルを見つけることができます。この情報を表示するには、objdump --dwarf=decodedline <binary>
を使用できます(バイナリコースは-g
でコンパイルする必要があります)。
objdump -S <binary>
と言うと、このドワーフ情報を使用して、ソースコードと逆アセンブリを提供します。
私の理解では、objdump
がバイナリコードのソースコードを表示するには、前提条件があります。DWARFデバッグ情報をバイナリにコンパイルする必要があります。 (沿って gcc -g sourcefile
またはgcc -gdwarf-2 sourcefile
)そして、このDWARF情報を処理することにより、objdump
は、@ vlcekmi3と@vkrntが回答したソースコードを取得できます。