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