2

私は現在、ファイル形式の構造を理解するために PE ファイルをいじる C++ でいくつかのテスト コードを書いています。私のプロジェクトは 64 ビットにコンパイルするように設定されています。私のコードでは、%SystemRoot%\system32\calc.exe を開き、IMAGE_DOS_HEADER および IMAGE_NT_HEADERS 構造を読み取ります。同時に、同じ calc.exe を Notepad++ で 16 進エディター プラグインを使用して開いています。コードが読み取った値を Notepad++ と比較したところ、それらが異なることに気付きました。calc.exe を System32 から C:\Temp\calc.exe にコピーしたところ、値が一致しました。

Notepad++ は 32 ビット アプリケーションのようです (PE ファイルはチェックしていませんが、デフォルトで Program Files (x86) にインストールされているため、安全な想定のようです)。

この WinSxS は機能していますか? または、他に何が原因ですか?また、%SystemRoot%\system32\calc.exe を開く 32 ビット アプリケーションに実際に供給されるファイルはどれでしょうか?

ちょっと興味があるんだけど。これについて何か光を当ててくれてありがとう。

4

3 に答える 3

5

はい、これが WOW リダイレクタです。C:\Windows\SysWOW64 にも calc.exe があることがわかります。これは、%SystemRoot%\System32\calc.exe パスを使用するときに開かれるファイルです。

これは、 Wow64DisableWow64FsRedirectionを使用して 64 ビット バージョンのファイルにアクセスするために一時的に無効にすることができます。

詳細については、File System Redirectorを参照してください。

于 2011-04-28T16:52:08.670 に答える
1

よく覚えているのですが、32 ビット アプリがsystem32ディレクトリを開こうとすると、自動的にsyswow64ディレクトリにリダイレクトされます。

于 2011-04-28T16:50:39.570 に答える
1

WowFs リダイレクトを無効にする必要はなく、場合によっては無効にすることもできません (たとえば、System32 ディレクトリ内のファイルを開くために Notepad++ を取得しようとしている場合)。%windir%\System32 の代わりに、仮想ディレクトリ %windir%\Sysnative を使用できます (エクスプローラーには表示されませんが、アドレス バーに入力できます)。

WOW64 は、wow64.dll、wow64cpu.dll、および wow64win.dll (および 32 ビット NTDLL) の 3 つの DLL で実装されます。リダイレクション (とりわけ) は wow64.dll に実装され、CPU エミュレーション/ヘルパー ルーチンは wow64cpu.dll に実装され、wow64win.dll には win32k.sys (Windows GUI を担当するカーネル モード ドライバー) へのサンクが含まれます。

于 2011-04-28T22:57:54.857 に答える