私は現在、ファイル形式の構造を理解するために 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 ビット アプリケーションに実際に供給されるファイルはどれでしょうか?
ちょっと興味があるんだけど。これについて何か光を当ててくれてありがとう。