32ビットプロセスからのOpening SystemRoot% System.exeは、別のファイルにリダイレクトされます。どちら、なぜ、どのように?
-
26-10-2019 - |
質問
私は現在、C ++でいくつかのテストコードを書いており、そのファイル形式構造を理解するためにPEファイルを混乱させています。私のプロジェクトは64ビットにコンパイルするように設定されています。私のコードでは、systemroot% system.exeを開き、image_dos_headerとimage_nt_headers構造を読み取ります。同時に、HEXエディタープラグインを使用してメモ帳++で同じCalc.exeを開いています。コードが読み取る値をメモ帳++と比較し、それらが違うことに気付きました。 system32からc: temp calc.exeにCalc.exeをコピーしましたが、値は一致します。
Notepad ++は32ビットアプリケーションのようです(PEファイルをチェックしていませんが、デフォルトではプログラムファイル(x86)にインストールされているため、安全な仮定のようです)。
これは仕事中ですか?またはこれを他に何を引き起こしていますか?そして、実際にどのファイルが32ビットアプリケーションに供給されていますか?
ちょっと興味があるんだけど。これについての光が流されてくれてありがとう。
解決
はい、これはすごいリダイレクターです。 C: Windows syswow64にもcalc.exeがあることがわかります。これは、%SystemRoot% System32 calc.exeパスを使用するときに開かれるファイルです。
これは一時的に無効にして、64ビットバージョンのファイルにアクセスできます wow64disablewow64fsredirection
詳細はにあります ファイルシステムリダイレクター
他のヒント
よく覚えていれば、32ビットアプリが開こうとしたとき System32 ディレクトリは、自動的にリダイレクトされます Syswow64 監督。
WOWFSリダイレクトを無効にすることは不要であり、時にはオプションでさえない場合があります(たとえば、System32ディレクトリでファイルを開くためにメモ帳++を取得しようとしている場合)。 %windir% system32ではなく、仮想ディレクトリ%windir% sysnativeを使用できます(エクスプローラーでは表示されませんが、アドレスバーに入力できます)
WOW64は、3つのdllに実装されています:wow64.dll、wow64cpu.dll、およびwow64win.dll(および32ビットntdll)。 (とりわけ)リダイレクトは、wow64.dll、wow64cpu.dllのcpuエミュレーション /ヘルパールーチンに実装されており、wow64win.dllにはwin32k.sys(windows guiを担当するカーネルモードドライバー)にサンクが含まれています。