WOW64 上でのデバッグ [1/2] ~ WOW64 とは何か?

WOW64 とは?

Windows では 64 ビットのクライアント OS は Windows XP で初めてリリースされました。 ただし、これは IA64 (Intel Itanium プロセッサ) アーキテクチャ向けでした。 その後、本格的に 64 ビットが広まったのは AMD の 64 ビットアーキテクチャが広まってからで、 インテルも同様のアーキテクチャを採用しました。現在普通に 64 ビットといえばこちらで、 これを x64 アーキテクチャといいます。(もともと AMD 発祥なので amd64 等とも書きますが、 MS はたいてい x64 と書きます) ちなみに、32 ビットの主流は x86 です。(x32 ではありませんので注意してください)

x64 は Vista で広まり、最近ではすっかりパソコン・ショップの店頭では 64 ビット (x64) Windows が主流になってきています。

基本的に 64 ビット OS では 64 ビット向けのプログラムしか実行できません。 つまり、従来の 32 ビット (x86) 向けに作られたプログラムは実行できないのです。 そこで、Windows-On-Windows エミュレーション・サブシステム (WOW64) が必要になります。 WOW64 は 64 ビット OS で 32 ビット向けのプログラムを実行可能にします。

32 ビットの環境向けに作られたプログラムを実行する場合は、始めに WOW64 サブシステムがロードされます。 主要なライブラリは ntdll.dll、WOW64.dll、WOW64Win.dll、WOW64Cpu.dll などです。 これらによって、32 ビットの命令を 64 ビット環境で解釈できるように変換するのです。

WOW64 モジュール説明
WOW64.dll主に 64 ビット版 ntdll.dll に実装された API へ渡すパラメータや戻り値の変換を行う。
WOW64Win.dllWindows メッセージ API の一部として win2k.sys を呼び出すモジュールの橋渡しを行う。
WOW64Cpu.dllx86 命令セットのエミュレーションを行う。

つまり、64 ビット OS で実行するにはあくまで 64 ビットの環境をターゲットとしてプログラムを作らなければならないのですが、 32 ビット向けに作られたプログラムも x64 上で動くように WOW64 が間に入り、プログラムの実行を可能としています。

結局上図のように、64 ビット OS で 32 ビットコードを実行させた場合、 同一プロセス内に WOW64 と x86 向けのコードが共存する形になります。

前置きは以上です。では、実際に WOW64 上のコードをデバッグする場合にどうしたらよいか見てみましょう。

» WOW64 上のデバッグ [1/2]

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説