stylesheet

2011-03-23

Windows 64-bit 実行可能ファイル (EXE, DLL)の判別方法

  1. 実行してタスクマネージャーから確認する
  2. バイナリエディタでPEヘッダー(NT)を確認する
  3. 専用の判別ツールを使う

(ツールのダウンロード)

:: 実行してタスクマネージャーから確認する

64-bit版のWindowsの場合は、タスクマネージャのプロセス一覧で判別できます。

必要な道具
64-bitのWindows

確認したいプログラムを実行中に、タスクマネージャー(Ctrl + Alt + ESC)を起動します。
プロセスタブを選択し、プロセス一覧からプログラムのファイル名を探します。
ファイル名の隣に「*32」とマークされていれば、そのプログラムは32-bitです。マークされていない場合は64-bitで実行中です。

確認の為だけに実行させたくないし、DLLファイルが判別できないじゃないかとお怒りの方はバイナリエディタでPEヘッダー(NT)を確認する へ進みます。

:: バイナリエディタでPEヘッダー(NT)を確認する

実行可能ファイルのターゲットマシンがヘッダー領域にかかれているので、バイナリエディタを使って目視で確認します。

必要な道具
バイナリエディタ(なければ気合でメモ帳でも可)

調査したい実行可能ファイルをバイナリエディタで開いて、「0x50450000 (PE\0\0)」 となっているバイト列を探します。大体、「0x00000100」 辺りのアドレスにあるようです。

うまくみつかったら、その隣の4バイトに注目です。
0x4C01」なら 32-bit x86 用の実行可能ファイル、「0x6486」なら 64-bit amd64 用のファイルです。

...どうせならx84用ももっとおしゃれな数字にしてほしかったですね。

メモ帳を準備して気合を充填したあなたは「PE 」(PEの後は半角スペース2つです)を検索してください。見つかった次の文字が「L」ならたぶん32bitです。「d」なら64bitです。

バイナリエディタなんて使いたくない!もっと簡単に判別したい。
あるいは、『ヘイ!ヘ-イ! This program cannot be...』とバイナリに語りかけられた方は、専用の判別ツールを使うへ進みましょう。

:: 専用の判別ツールを使う

PEiDで64-bitのファイルが見れませんでした。仕方がないので、参考資料を漁りながら作ってみました。

使い方ですが...
右上の「...」ボタンを押してファイルを選択するか、ファイルをウィンドウにドロップすると判別を行います。
「Machine」の項目に「AMD64 (K8)」と表示されていれば、amd64/x64の64-bit実行可能ファイルです。「i386」の場合は、32-bitです。

その他項目の詳しい情報は、MSDNのIMAGE_FILE_HEADERIMAGE_OPTIONAL_HEADER 辺りを参照してください。

MSDNに記載されている以外にも Winnt.h ヘッダファイルにいろいろと定義されていました。Windows MobileやXBOX360のファイルなど、いろいろ放り込んでみると楽しいかもしれません。

ツールのダウンロード

https://bitbucket.org/yamorijp/apec/downloads/apec_0.1.zip
bitbucket よりどうぞ。

apec_0.1.zip (98,529 bytes)
MD5(b6ea907a60009520641f317bde84bb78) = apec_0.1.zip

ソースコード

mercurialでcloneしてください。

$ hg clone http://bitbucket.org/yamorijp/apec/