ldd
には動的ライブラリのみが一覧表示されるため、実行可能ファイルの作成に使用される静的ライブラリに関する情報を抽出する方法はありますか?実行可能ファイルに使用される静的ライブラリのリストを取得
答えて
ldd <exe filename>
は
nm <exe filename>
は、ファイル内のシンボルを示しているダイナミックリンクライブラリを示しています。
スタティックライブラリからのシンボルを確認するには、これらのライブラリに対してシンボル(関数など)のリストを取得するためにnm
を実行してから、シンボルリスト(nm <exe filename>
)と比較する必要があります。
リストをcomm
コマンドと比較します。詳細については、man comm
を参照してください。
これはこのフォーラムhereから取られました。
いいえ。ライブラリの名前は、リンク処理中に破棄されます。ただし、実行可能ファイルにデバッグ情報が含まれている場合(つまり、-gフラグを付けてコンパイルした場合)、その情報を取得できます。
RAW ASMを識別する方法がないか、コンパイラの最適化とフラグも影響を与えますか? – MrMesees
あるコンパイラが何らかの種類のメタデータをバイナリ内に格納していない限り、いいえ。静的ライブラリは、バイナリに直接コンパイルされたコードです。
ソースコードがあり、このコードをすべて実行したくない場合は、コンパイル中にマップファイルを生成して、どのスタティックライブラリがリンクされているかを知ることができます。
たとえば、g++ -Xlinker -Map=a.map main.c
の場合、マップファイルでリンクされた静的ライブラリ情報を確認します。
ELF実行ファイル内の静的ライブラリのリストを取得する方法はありません。
リンカのために、静的ライブラリはメンバーの「怠け者」セットとして使用されるだけなので、結果として得られるELF実行ファイルには、リンクするために必要なメンバーだけが含まれます。したがってfoo2.o
のようなメンバーがlibfoo.a
の場合、オブジェクトファイルfoo2.o
が実行可能ファイルにリンクされているかのようにリンクされます(foo2
で定義されたシンボルが必要です。いくつかのヒントを与えることnm
、またはobjdump
、またはreadelf
、またはいくつかのELF実行可能にstrings
を使用してもちろん
、何についてあなたはシンボルが表示されますので、その中にある(静的ライブラリから来るものを含む)オブジェクトファイルそれらの静的ライブラリ(またはその内部で使用されるリテラル文字列)の(メンバ)で定義されています。
どのようなヒントがありますか?あなたは例を挙げることができますか?私はこれらのヒントの多くを見つけることができるソースに私を指摘できますか? – stackoverflowwww
たとえば、readelfを使用すると、バイナリで使用される関数、オブジェクト、シンボルが表示されます。これらは、使用されたライブラリを見つけるためのヒントとして役立ちます。たとえば、Curl_http関数がそこにあり、libcurlがバイナリによって使用される可能性が高いことがわかります。また、動的にリンクされていなければ静的にリンクする必要があります。 – ohgodnotanotherone
- 1. 実行可能ファイルから静的にリンクされたライブラリを抽出する
- 2. 静的ライブラリと実行可能ファイルを単一のインストールで生成する(autoconf)
- 3. C++から実行可能な共有ライブラリのリストを取得するには?
- 4. UNIX:実行可能ファイルを静的ライブラリと動的ライブラリの両方にリンクしていますか?
- 5. 静的ライブラリとのリンク時にオブジェクトコードを実行可能ファイルにコピーする方法は?
- 6. 実行可能ファイルを別の実行可能ファイルにインクルード
- 7. linuxスクリプトの結果PHP(実行可能ファイル)を使用して取得
- 8. メインクラスのないアプレット用のJAR実行可能ファイルを取得するには?
- 9. xugglerライブラリを使用して実行可能ファイルjavaを作成する方法
- 10. コンパイルされた実行可能ファイルからコンパイラオプションを取得しますか?
- 11. 実行可能ファイルからコードを取得する
- 12. 実行ファイルに静的ファイルをコンパイル
- 13. GCC共有ライブラリを実行可能ファイルにリンクする
- 14. runhaskell/ghciでまだ実行されているライブラリ+実行可能ファイルでHaskellカバールプロジェクトを作成するには?
- 15. ANT - Javaを使用してAntライブラリから利用可能なタスクのリストを取得するには
- 16. 複数のライブラリと実行可能ファイルのCMakeLists.txtファイル
- 17. 実行可能ビットが設定されたファイルを再帰的にチェックする
- 18. .NET実行可能ファイルをネイティブ実行可能ファイルに変換する
- 19. Qt:Linuxで使用可能なオーディオデバイスのリストを取得します
- 20. launch4jを使用しているときに実行可能ファイルへのパスを取得する方法は?
- 21. VBで現在の実行可能ファイルのフルパスを取得するには?
- 22. wgetまたはcurlを使用して使用可能なファイルのリストを取得するには?
- 23. MSVCプロジェクトで使用されるMingw静的ライブラリ
- 24. 読み取り専用とマークされたプログラム実行可能ファイル
- 25. 他の静的ライブラリにリンクする静的ライブラリに動的ライブラリをリンクする
- 26. リンクされたライブラリのリストを取得するにはココアコード
- 27. 私は次のような方法で使用される実行可能持つ実行可能
- 28. 静的テーブルビューの行数を取得
- 29. 静的ライブラリ、self.viewへのアクセスを得る
- 30. SAFELY Windowsで実行可能な実行可能ファイルへのパス
@Gozとanonが指摘しているように、これはバイナリが削除されていないか、デバッグ情報が含まれている場合にのみ動作します。静的ライブラリがアプリケーションにリンクされた後も、名前は必要ではなく(使用されていなくても)、呼び出しはすべてアドレスで行われます。 –
これは質問に答えません。ライブラリーが分からない場合、「それらのライブラリーに対してnmを実行する」ことはできません。リンクに暗黙的に使用されるライブラリがあります。 – kavadias
未知のバイナリであれば、どのライブラリが存在するのかわかりません。したがって、「それらのライブラリに対してnmを実行する」とは、自己破滅してしまいます。 – goldenmean