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. "stress-ng"パッケージの静的にリンクされた実行可能ファイルをコンパイルする
- 4. C++から実行可能な共有ライブラリのリストを取得するには?
- 5. UNIX:実行可能ファイルを静的ライブラリと動的ライブラリの両方にリンクしていますか?
- 6. 静的にリンクされたLTO実行可能ファイル(リンク時間の最適化):以前ビルドされたライブラリを使ってファイルを作る方法
- 7. 静的ライブラリと再入可能のユーザカスタマイズ
- 8. 静的ライブラリとのリンク時にオブジェクトコードを実行可能ファイルにコピーする方法は?
- 9. SQLAPI ++:実行可能ファイルによってロードされた共有ライブラリへのパスを取得
- 10. Paho CPP - 静的実行可能ファイルとしてコンパイル
- 11. C++で実行可能ファイル名を取得するには?
- 12. 実行可能ファイルを別の実行可能ファイルにインクルード
- 13. linuxスクリプトの結果PHP(実行可能ファイル)を使用して取得
- 14. 実行時に利用可能なTextFieldのリストを取得しますか?
- 15. メインクラスのないアプレット用のJAR実行可能ファイルを取得するには?
- 16. 静的ライブラリの使用
- 17. wpfの実行可能ファイルを取得するC#プロジェクト
- 18. 再帰的抽出ライブラリを使用する場合、抽出されたファイルのリストを取得
- 19. xugglerライブラリを使用して実行可能ファイルjavaを作成する方法
- 20. 実行ファイルに静的ファイルをコンパイル
- 21. GCC共有ライブラリを実行可能ファイルにリンクする
- 22. プロセスクラスで実行される実行可能ファイルのパスをC#で取得する
- 23. コンパイルされた実行可能ファイルからコンパイラオプションを取得しますか?
- 24. 実行可能ファイルからコードを取得する
- 25. runhaskell/ghciでまだ実行されているライブラリ+実行可能ファイルでHaskellカバールプロジェクトを作成するには?
- 26. 静的にリンクされたライブラリ:コードが実行可能ファイル内の連続した領域にあるかどうかを調べるには?
- 27. エスケープ実行可能ファイルのソースコードを取得
- 28. ANT - Javaを使用してAntライブラリから利用可能なタスクのリストを取得するには
- 29. 複数のライブラリと実行可能ファイルのCMakeLists.txtファイル
- 30. c#アセンブリ実行可能ディレクトリを取得
@Gozとanonが指摘しているように、これはバイナリが削除されていないか、デバッグ情報が含まれている場合にのみ動作します。静的ライブラリがアプリケーションにリンクされた後も、名前は必要ではなく(使用されていなくても)、呼び出しはすべてアドレスで行われます。 –
これは質問に答えません。ライブラリーが分からない場合、「それらのライブラリーに対してnmを実行する」ことはできません。リンクに暗黙的に使用されるライブラリがあります。 – kavadias
未知のバイナリであれば、どのライブラリが存在するのかわかりません。したがって、「それらのライブラリに対してnmを実行する」とは、自己破滅してしまいます。 – goldenmean