Linux (具体的には RHEL) で現在の実行可能ファイルが生成されるオブジェクト ファイルを見つける方法はありますか。「nm」を使用してエクスポートされたシンボルを検索し、「ldd」を使用して依存共有オブジェクトを検索できることを理解しています。
しかし、実行可能ファイルを構成するオブジェクト (.o) ファイルの名前を調べるコマンドが見つかりませんでした。出来ますか?
Linux (具体的には RHEL) で現在の実行可能ファイルが生成されるオブジェクト ファイルを見つける方法はありますか。「nm」を使用してエクスポートされたシンボルを検索し、「ldd」を使用して依存共有オブジェクトを検索できることを理解しています。
しかし、実行可能ファイルを構成するオブジェクト (.o) ファイルの名前を調べるコマンドが見つかりませんでした。出来ますか?
デバッグ情報を使用してコンパイルされている場合は、はい。gdb(man gdb)を使用して情報を検索します。
デバッグ情報なしでコンパイルされていない場合。あなたは運が悪い。
次のものも使用できますobjdump
(実行可能ファイルとオブジェクトがデバッグ情報を使用してコンパイルされている場合):
# gcc -g -c -o /tmp/some_object.o /tmp/some_object.c
# gcc -g -o /tmp/file /tmp/file.c /tmp/some_object.o
# objdump -g /tmp/file | awk 'BEGIN{out=0} /Directory Table/{out=1} /Line Number Statements/{out=0} {if(out){print $0}}'
The Directory Table (offset 0x1b):
1 /tmp
The File Name Table (offset 0x21):
Entry Dir Time Size Name
1 1 0 0 file.c
The Directory Table (offset 0x5a):
1 /tmp
The File Name Table (offset 0x60):
Entry Dir Time Size Name
1 1 0 0 some_object.c
awk
関連する情報を抽出するためだけに使用されます (使用しない場合は、実行可能ファイルとオブジェクトで完全なデバッグ情報が取得されます)。
nullptr に加えて、「共有オブジェクト」は、元のオブジェクト (リンクされていない) ではなく、他の共有ライブラリ (リンクされている) を参照します。
オブジェクト ファイルは、リンク後に実行可能ファイルに変換されます。リンクが共有されている場合は、共有ライブラリ ( ) を介して取得できますldd
。ただし、リンクが静的である場合は、デバッグ情報を使用するしか方法がありません。RHEL (または Fedora については Fedora) に debuginfo パッケージをインストールできます。ここに指示があります
info sources
次に、ここで説明されているようにgdb を使用します。
これにより、ソース ファイルのリストが表示されます。しかし、実際にオブジェクト ファイルを取得するには、ビルド ツールをさらに詳しく調べる必要があります ( rpmbuild
)。実際に rpmbuild を実行するには、ソース RPM パッケージが必要です。これは、次の手順に従って入手できます。
これで、自分でパッケージをビルドし、どの.o
ファイルが実行可能ファイルになったかを分析できます。
それが役立つことを願っています。