Windowsライブラリ(* .lib)の内容を表示する方法
-
08-07-2019 - |
質問
バイナリファイルがあります-Windows静的ライブラリ(* .lib)。
そのライブラリから関数とそのインターフェースの名前を見つける簡単な方法はありますか?
emfar
および elfdump
ユーティリティに似たもの(Linuxシステムの場合)?
解決
静的ライブラリについて話していると仮定すると、 DUMPBIN / SYMBOLS
はライブラリ内の関数とデータオブジェクトを表示します。インポートライブラリ(DLLからエクスポートされたシンボルを参照するために使用される .lib
)について話している場合は、 DUMPBIN / EXPORTS
が必要です。
" C"にリンクされている関数の場合、バイナリインターフェイス、これはまだ値、パラメーター、または呼び出し規則を返しません。その情報は .lib
にはまったくエンコードされていません。それらを正しく呼び出すためには、事前に(たとえば、ヘッダーファイルのプロトタイプを使用して)そのことを知っておく必要があります。
C ++バイナリインターフェイスにリンクされた関数の場合、呼び出し規則と引数は、関数のエクスポートされた名前(「名前マングリング」とも呼ばれます)でエンコードされます。 DUMPBIN / SYMBOLS
は、両方の" mangled"を表示します。関数名とパラメータのデコードされたセット。
他のヒント
ビジュアルコマンドコンソールを開きます(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 Tools -> 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
キーワードを検索することは良いヒントのようです。