コンパイル済みの GUI アプリケーションがあります。MFC ライブラリを使用してプログラムされているかどうかを知る必要があります。Depends.exe は、MFC42*.dll への依存関係を返しません。実行可能ファイルに関する追加情報を取得するツールはありますか? (可能であれば、ライブラリだけでなく、使用されているコンパイラなど..)
9 に答える
アプリケーションがMFCを使用して記述されている場合、通常はAfx :文字列で始まるクラス名を持つウィンドウで構成されます。
また、 Spy++ユーティリティにアクセスできる場合は、実行可能ファイルのクラス名の詳細を簡単に照会できます。
dumpbin は、静的にリンクされている場合に必要なツールです。MFC シンボルは '...Afx...' または '...MFC...' という名前が付けられる傾向があるため、これらが表示される場合は、おそらく MFC を使用しています。このユーティリティは、リンカのバージョン、コンパイル対象の OS なども教えてくれます。
関心のあるアプリケーションが MFC に動的にリンクされている場合、XX はバージョン番号である MFCXX.dll に依存します。たとえば、アプリケーションは MFC80.dll に依存しています。
ただし、アプリケーションが静的にリンクされている場合は、MFC のすべてのソースがアプリに直接コンパイルされます。
また、MFC アプリケーションは、共有ライブラリを使用するのではなく、MFC ライブラリに静的にリンクされている可能性があることに注意してください。静的にリンクされた MFC アプリケーションは、MFCXXX.dll への依存関係を依存関係の直接の依存関係として表示しません。
標準 MFC リソースのいずれかが実行可能ファイルに含まれているかどうかを確認できます。
ファイル (SDK または VS インストールの一部) に対して dumpbin ユーティリティを実行してみてください。
「dumpbin /exports」を実行すると、明らかな MFC イズムを探すことができます。ただし、存在するかどうかはわかりません。そのため、テストでは、MFC が静的にリンクされていることを確認するだけで、反論することはありません。
アプリケーションを実行できる場合は、実行してから、Sysinternals ツールのProcessExplorerを使用して、ロードされた DLL を表示します。
それとも、アプリが MFC を使用しているかどうかをプログラムで判断する方法が必要ですか? また、Depends が期待どおりに表示されないことに少し驚いています。Depends の出力を ProcessExplorer と比較して、何がわかるかを確認してください。
Babak Farrokhi はかつて、「Language 2000」という非常に便利な小さなプログラムを作成しました。このプログラムは、exe をスキャンしてライブラリとフレームワークのバイナリ シグネチャを探します。以前は、静的にリンクされた MFC プログラムを 2 本の指で検出していました。私が数年前に使ったときは、プログラムはすでに古いものでした。新しいバージョンが利用可能かどうか、または署名がまだ機能しているかどうかを Web で確認する必要があります。知るか!