Windowsで動く、実行形式のファイル、拡張子が「.exe」になっている、いわゆる「アプリ」ですが、アプリが作られた際の方式(アーキテクチャ)の違いにより、32bitアプリや64bitアプリといった種類が存在します。しかし、Windows Explorerで見ても、デスクトップなどのアイコンを見ても、それが32bitか64bitかは判断できません。
ここでは、アプリ自体の中身を調べて32bitか64bitかを判断する方法の一例を紹介します。なお、詳しいツールの使い方などについての説明は行いません。ある程度、プログラム開発やシステム開発などに携わってIT系の知識がある人を前提とさせていただきます。
バイナリーエディタでPEヘッダーを見る
実行形式ファイル(以下EXEファイルと略記)をバイナリーエディタで確認すると、ファイルの冒頭、アドレスにして「0x100~0x200」のあたりに、「50 45」で始まるブロックがあります。ASCII表示だと「P E」となるこの部分、ファイルの特徴等について記述されたPEヘッダー*1と呼ばれるエリアです。この「P E」のすぐうしろを見てください。この部分が下記のどちらかで、32bit、64bitの判定が可能です。
- 4C 01 …… 32bitアプリケーション
- 64 86 …… 64bitアプリケーション
(無理矢理)テキストエディターで見る
バイナリーエディターを使った方法を紹介しましたが、少々無理矢理ではあるものの、テキストエディターを使っても同様の事ができます。下図は、32bitアプリケーションである「Excel.exe」を、Windows標準のメモ帳で開いてみたところです。上の方に「PE」という文字があり、その後ろに「L」と書かれています。この部分の文字で、以下のように判別が可能です。
- 「PE・・L」…… 32bitアプリケーション
- 「PE・・d」…… 64bitアプリケーション
冒頭に書いたDiablo IVの場合と同じように、バイナリーエディターで見た様子は下記の通り。右の「Decoded Text」のところが「PE・・L」になっているのが分かるかと思います。
判別に使っている情報の正体
この判別に使っている「PE」という文字に連なる「4C 01」や「64 86」といった情報の正体ですが、WindowsのEXEファイルに含まれる「PEヘッダー」と呼ばれる情報のうち「IMAGE_FILE_MACHINE」と呼ばれる、EXEファイルが動くコンピューターの種類を指定する情報です。これはマイクロソフトによってルールが定められており、今巷に出回っているIntelやAMDといったメーカーのCPU以外にも、様々なCPUで動くコンピューターに対応できるよう、いろんな種類が定義されています。以下に一例を示します。
IMAGE_FILE定数の種類(抜粋)
- IMAGE_FILE_MACHINE_I386(インテル/AMD 32bit CPU用) …… 0x014C
- IMAGE_FILE_MACHINE_AMND64(インテル/AMD 64bit CPU用)…… 0x8664
- IMAGE_FILE_MACHINE_ARM(ARM製CPU用)…… 0x01C0
- IMAGE_FILE_MACHINE_POWERPC(古いApple社CPU用)…… 0x01F0
- IMAGE_FILE_MACHINE_R4000(MIPS R4000用)…… 0x0166
詳しくは、下記サイトに列挙されています。
learn.microsoft.com
上記の「IMAGE_FILE_MACHINE_I386」の値「014C」を見て、冒頭に書いた『32bitならば「4C 01」』と違うじゃないかと思われるかもしれません。これは、コンピューターの中にはデータの上位桁と下位桁を交換して保持する「リトルエンディアン」と呼ばれる方式のものがあるためです。Windowsなどが動いている、市販のパソコンで使われるインテルやAMD社のCPUは、このリトルエンディアン方式を採用しており、データを書き込んだり取り扱ったりする際に1バイト(16進数ならば2桁分)ずつ、上下を入れ替えて保存します。そのため、Windowsなどで使われているEXEファイルの中身も、値を保存する部分についは上下が逆転した形で保存されており、マイクロソフトのルールでは「01 4C」であっても、実際のファイルの中身は「4C 01」になっています。
参考情報
Win32 API IMAGE_FILE_HEADER構造体
ファイル情報を取得するAPIで扱う構造体の定義情報です。この中のメンバー「Machine」の内容が、前述の「IMAGE_FILE_MACHINE……」になります。
learn.microsoft.com
IMAGE_FILE_MACHINEイメージファイルマシン定数
アーキテクチャ判別ツール(HEROUSE PE Header Reader)
こういうツールを作って下さっている方もいらっしゃいます。お手軽に調べるならこういうものを使うのも手です。
www.vector.co.jp
*1:PE: Portable Executable の略