はじめに
たまに EXE / DLL が 32bit / 64bit いずれのものなのか調べたい時がありますよね。
やり方
dumpbin.exe? Delphi (や C++Builder) をインストールした環境なら、<インストールフォルダ>\bin
に TDUMP.EXE があるので、これを使います。
See also:
テスト用の DLL を作る
EXE の 32bit / 64bit は実行してみればタスクマネージャで判るので、今回は DLL でテストします。まずはテスト用の中身のない DLL を作ります。
- [新規作成 | その他] で
ダイナミックリンクライブラリ
を選択。
- [ファイル | プロジェクトに名前を付けて保存] で適当な場所に
TestDLL.dproj
として保存。 - プロジェクトマネージャの
ターゲットプラットフォーム
を右クリックして [プラットフォームの追加]。
-
Windows 64ビット
を選択して [OK]。
- [ビルドグループペインの表示] ボタンを押してビルドグループペインを表示
6.[ビルドグループを新規作成] ボタンを押す。
7.名前をALL
にする。
8.[構成] をRelease
にし、[プラットフォーム] をWin32;Win64
とする。
9.[現在のビルドグループをビルド] を押す。
これで 32bit と 64bit の DLL が一気に生成されます。
で、判別方法
tdump -e ファイル名
とやると、次のような結果が得られます。
Old Executable Header
DOS File Size 110E00h (1117696. )
Load Image Size 210h ( 528. )
Relocation Table entry count 0000h ( 0. )
Relocation Table address 0040h ( 64. )
Size of header record (in paragraphs) 0004h ( 4. )
Minimum Memory Requirement (in paragraphs) 000Fh ( 15. )
Maximum Memory Requirement (in paragraphs) FFFFh ( 65535. )
File load checksum 0000h ( 0. )
Overlay Number 001Ah ( 26. )
Initial Stack Segment (SS:SP) 0000:00B8
Program Entry Point (CS:IP) 0000:0000
Portable Executable (PE) File
Header base: 00000100
CPU type 80386
Flags A18E [ executable 32bit library ]
DLL flags 0000 [ ]
Linker Version 2.19
Time stamp 5F6F442B : Sat Sep 26 22:37:47 2020
O/S Version 5.0
User Version 0.0
Subsystem Version 5.0
Subsystem 0002 [ Windows GUI ]
Object count 0000000A
Symbols offset 00000000
Symbols count 00000000
Optional header size 00E0
Magic # 10B
Code size 000F2C00
Init Data size 0001DE00
Uninit Data size 00000000
Entry RVA 000F48E4
Image base 00400000
Code base 00001000
Data base 000F5000
Object/File align 00001000/00000200
Reserved 00000000
Image size 0011E000
Header size 00000400
Checksum 00000000
Stack reserve/commit 00000000/00000000
Heap reserve/commit 00100000/00001000
Number interesting RVAs 00000010
...
CPU type
行が 80386 なら 32bit、AMD64 なら 64bit DLL です 1。
<インストールフォルダ>\bin
には GREP.EXE もあるので、
tdump -e ファイル名 | grep "CPU type"
とやると、CPU type
行だけを抽出できます。
EXE / DLL の 32bit / 64bit を調べるだけなら TDUMP64.EXE を使っても結果は同じです。
See also:
おわりに
誰ですか?**「メモ帳に食わせれば...」**とか言うのは!
名前 | 値 |
---|---|
IMAGE_FILE_MACHINE_I386 | 0x014C |
IMAGE_FILE_MACHINE_AMD64 | 0x8664 |
See also:
- 006_究極の選択 - アセンブリ言語と PE ヘッダ (Mr.XRAY)
- IMAGE_NT_HEADERS32 structure (winnt.h) (docs.microsoft.com)
- IMAGE_FILE_HEADER structure (winnt.h) (docs.microsoft.com)
-
16bit EXE / DLL だと何も表示されません ("CPU type" 行がありません)。 ↩