つまり、.exeファイルはWindowsで実行できるファイルですが、正確には何が含まれているのでしょうか。プロセッサ固有のアセンブリ言語?または、特定のプロセッサのアセンブリに変換するWindowsによって認識されるある種の中間ステートメントですか? Windowsがファイルを「実行」するとき、ファイルは正確に何をしますか?
MSDNには、実行可能ファイルの構造を説明する記事 " Win32 Portable Executable File Formatの詳細 "があります。
基本的に、.exeには、データのいくつかのblobと、それらをメモリにロードする方法に関する指示が含まれています。これらのセクションの一部には、実行可能なマシンコードが含まれています(他のセクションには、プログラムデータ、リソース、再配置情報、インポート情報などが含まれています)。
Exeを実行するとどうなるかについての完全な説明については、 Windows Internals のコピーを入手することをお勧めします。
ネイティブ実行可能ファイルの場合、マシンコードはプラットフォーム固有です。 .exeのヘッダーは、.exeのプラットフォームを示します。
ネイティブの.exeを実行すると、次のことが起こります(大幅に簡略化されています)。
管理対象の実行可能ファイルにはMSIL(Microsoft Intermediate Language)が含まれており、CLRがサポートする任意のCPUをターゲットにできるようにコンパイルできます。私はCLRローダーの内部動作(CLRをブートストラップしてMSILの解釈を開始するために最初に実行されるネイティブコード)にそれほど精通していません-おそらく他の誰かがそれについて詳しく説明することができます。
.exeファイルの最初の2バイトに含まれるもの-'MZ 'を教えてください。私は文字「MZ」を意味します。
それは実際に表しています:マーク・ズビコフスキー。 exeファイル形式を設計した人。
1と0!
このウィキペディアのリンク は、Windowsアプリケーションで使用されるPortableExecutable形式で必要なすべての情報を提供します。
EXEファイルは、実際にはPortableExecutableと呼ばれるファイルの一種です。これには、プロセッサが読み取って実行できるバイナリデータが含まれています(基本的にx86命令)。ヘッダーデータやその他のコンテンツのlotもあります。実際の実行可能コードは.text
というセクションにあり、マシン命令(プロセッサ固有)として保存されます。このコード(および.EXEの他の部分)はメモリに格納され、CPUがメモリに送信され、そこで実行が開始されます。 (実際にはもっと多くのインターフェースが発生していることに注意してください。これは簡単な説明です)。