275

特定のディレクトリ内のすべての DLL ファイルが特定のビルド タイプであることを確認するテスト スクリプトまたはプログラムを作成したいと考えています。

これを SDK のビルド プロセスの最後にサニティ チェックとして使用し、64 ビット バージョンに 32 ビット DLL ファイルが含まれていないことを確認します。

DLL ファイルを見て、そのタイプを判別する簡単な方法はありますか?

このソリューションは、xp32 と xp64 の両方で機能するはずです。

4

5 に答える 5

174

大まかな方法​​は、各 DLL の Visual Studio ツールから headers オプションを指定して dumpbin を呼び出し、適切な出力を探すことです。

ダンプビン/ヘッダー my32bit.dll

PE 署名が見つかりました

ファイルの種類: DLL

ファイルヘッダーの値
             14C マシン (x86)
               1 セクション数
        45499E0A タイム デート スタンプ Thu Nov 02 03:28:10 2006
               0 シンボル テーブルへのファイル ポインタ
               0 シンボル数
              オプションヘッダのE0サイズ
            2102の特徴
                   実行可能
                   32ビットワードマシン
                   DLL

オプションのヘッダー値
             10Bマジック#(PE32)

その出力には、Paul が言及した 14C 値を含む、32 ビット DLL であるといういくつかの手がかりが見られます。スクリプトで簡単に検索できるはずです。

于 2009-01-30T12:30:50.097 に答える
128

Cygwin (または MobaXTerm、または Windows 用の Git Bash、または WSL など) がインストールされている場合 (さまざまな理由からこれを強くお勧めします)、DLL で「file」ユーティリティを使用できます。

file <filename>

次のような出力が得られます。

icuuc36.dll: MS-DOS executable PE  for MS Windows (DLL) (GUI) Intel 80386 32-bit
于 2009-01-30T12:30:01.847 に答える
49

Dependency Walker はすべてを (ほぼ) 教えてくれます。 http://www.dependencywalker.com/

「インストール」するのではなく、取得して展開し、exec を実行するだけです。x32 または x64 Windows モジュール|アプリケーションで動作します。

私が思い出したように、すべての依存関係、つまり dll モジュール、および appl. 完全なx64、x32(x86)、またはそれぞれのビットであるかどうかを確認できる依存関係の合計です。

モジュールが構築された CPU のタイプは、「CPU」列にあります。ほとんどの 64 ビット AP はまだ少しずつですが、32 ビット AP はすべて x86 です。

オタク/プログラマー向けの美しいプログラムで、無料です...

于 2011-01-27T03:35:13.147 に答える
45

私はまさにそれを行う非常に単純なツールを作成しました - それは PE Deconstructor と呼ばれます。

起動して DLL ファイルをロードするだけです。

ここに画像の説明を入力

上記の例では、ロードされた DLL は 32 ビットです。

ここからダウンロードできます (私は 64 ビット バージョンでコンパイルされた ATM しか持っていません):
https://files.quickmediasolutions.com/exe/pedeconstructor_0.1_amd64.exe

古い 32 ビット バージョンは、
https ://dl.dropbox.com/u/31080052/pedeconstructor.zip から入手できます。

于 2012-03-01T23:21:48.623 に答える