バイナリファイル-Windows静的ライブラリ(* .lib)があります。
そのライブラリから関数の名前とインターフェースを見つける簡単な方法はありますか?
emfar
およびelfdump
ユーティリティ(Linuxシステム)に似たもの
静的ライブラリについて話していると仮定すると、DUMPBIN /SYMBOLS
はライブラリ内の関数とデータオブジェクトを表示します。インポートライブラリ(DLLからエクスポートされたシンボルを参照するために使用される.lib
)について話している場合、DUMPBIN /EXPORTS
が必要です。
「C」バイナリインターフェイスにリンクされた関数の場合、これはまだ値、パラメーター、または呼び出し規約を返しません。その情報は.lib
にまったくエンコードされていません。正しく呼び出すためには、事前に(たとえば、ヘッダーファイルのプロトタイプを使用して)そのことを知っておく必要があります。
C++バイナリインターフェイスにリンクされた関数の場合、呼び出し規約と引数は関数のエクスポートされた名前(「名前マングリング」とも呼ばれます)でエンコードされます。 DUMPBIN /SYMBOLS
は、「マングルされた」関数名とデコードされたパラメーターセットの両方を表示します。
ビジュアルコマンドコンソールを開きます(Visual Studioコマンドプロンプト)
dumpbin /ARCHIVEMEMBERS openssl.x86.lib
または
lib /LIST openssl.x86.lib
または7-Zipで開く :)そのARアーカイブ
Unixでar t libfile.a
のようなツールが欲しかった。
同等のウィンドウはlib.exe /list libfile.lib
です。
「dumpbin -exports」はdllでは機能しますが、libでは機能しない場合があります。 libの場合、「dumpbin -linkermember」または単に「dumpbin -linkermember:1」を使用できます。
DUMPBIN /EXPORTSその情報のほとんどを取得し、MSDNを押すと残りを取得します。
Visual Studioパッケージの1つを入手します。 C++
1)VS 2017(またはマシンにあるバージョン)の開発者コマンドプロンプトを開きます(スタートメニュー->すべてのプログラム-> Visual Studio 2017(またはマシンにあるバージョン)にあります) -> Visual Studioツール-> VS 2017の開発者コマンドプロンプト。
2)次のコマンドを入力します。
dumpbin /EXPORTS my_lib_name.lib
他の回答で見られるように、Visual Studioのバージョンで提供される開発者コマンドプロンプトを開いて、実行パスにdumpbin.exe
を含める必要があります。それ以外の場合は、必要な環境変数を手動で設定できます。
dumpbin /EXPORTS yourlibrary.lib
は通常、シンボルの小さなリストのみを表示します。多くの場合、ライブラリがエクスポートする関数は表示されません。
dumpbin /SYMBOLS /EXPORTS yourlibrary.lib
はそのシンボルを表示しますが、非常に多くの他のシンボルも表示します。そのため、おそらくfindstr
(MS-Windowsツールが必要な場合)またはgrep
へのパイプを使用して、それらをフィルタリングする必要がありました。
これらのツールのいずれかを使用してStatic
キーワードを検索することは、良いヒントのようです。