最近、本格的に64ビットコンパイラの製作をはじめようかな〜と思い始めてきたおいら。まずはディープに情報集めからはじめようと思います。

普通の64ビットユーザーになろうとするならば、まずは対応PCを模索するか、物好きな方はCPUの種類とそれに対応するマザーボード及び周辺機器を探るんだと思います。しかし、おいらはあえてこの過程を後回しにします。

そう、まずは64ビットEXEファイルのPEヘッダがどんな仕組みになっているか、各シグネチャがどのような値を持っているのかを探ります。残念ながら、このような情報は国内のWeb上にはないです。32ビットのPEヘッダ情報は探せばあるかもしれませんが、64ビットまで考慮した情報は皆無だといっていいでしょう。

まずは、バイナリエディタでWin64対応のEXEファイルのヘッダを覗いてみます。すると、案の定、見慣れたヘッダが顔を出しました。ファイルデータは “MZ” から始まり、”This program cannot be run in DOS mode.” などというお決まりの文字列も含まれています。その先には、”PE” というPEヘッダの先頭部分を示すコードもあります。

問題はその次の値。マシンタイプです。通常であればIMAGE_FILE_MACHINE_I386(0x14c)という値がここに入っているのですが、なにやら0x8664というそれらし〜い怪しげな値が入っています。”0x8664″と検索してみると、マイクロソフトのページがヒットしたんで、そこを見てみると謎が解けます。

そう、0x8664というシグネチャの定数名はIMAGE_FILE_MACHINE_AMD64。その他、IMAGE_FILE_MACHINE_IA64(0x0200)という値もあるのですが、こちらはたぶんItanium対応のものでしょう。それにしても、AMD64というのが興味深いところですね。Intelだって、x64に対応するCPUを出しているのに、なぜシグネチャの定数名にはAMD64という字句が指定されているのでしょう??

こいつはたぶん、以下のような理由からなんだと思います。

・Intelは、Itaniumを全面に押し出して64ビットCPUの展開をはかろうとした

・逆に、AMDはx64に対応するAthron64を押し出した

・x64のほうがユーザー市場への浸透がスムーズに行えるという専門化の判断から、Intelもx64に対応した

という具合に、x64の提案を推し進めたのはAMDなんですね。なので、x64といえば、AMDのプロセッサだという意味合いでIMAGE_FILE_MACHINE_AMD64というシグネチャ定数名がついたんだと思います。

え〜こんな具合で、未知の領域に足を踏み入れ始めました。64ビット対応EXEの解析ですが、面白い具合に64ビットを示すシグネチャが見つかるんですよね!時間が経つのが早いっす。最近、パソコン離れしていたおいらですが、また惹きつけられてしまいそう。ワクワク♪