32ビットプロセスからのOpening SystemRoot% System.exeは、別のファイルにリダイレクトされます。どちら、なぜ、どのように?

StackOverflow https://stackoverflow.com/questions/5822113

質問

私は現在、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を担当するカーネルモードドライバー)にサンクが含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top