web-dev-qa-db-ja.com

.exeファイルには何が含まれていますか?

つまり、.exeファイルはWindowsで実行できるファイルですが、正確には何が含まれているのでしょうか。プロセッサ固有のアセンブリ言語?または、特定のプロセッサのアセンブリに変換するWindowsによって認識されるある種の中間ステートメントですか? Windowsがファイルを「実行」するとき、ファイルは正確に何をしますか?

35

MSDNには、実行可能ファイルの構造を説明する記事 " Win32 Portable Executable File Formatの詳細 "があります。

基本的に、.exeには、データのいくつかのblobと、それらをメモリにロードする方法に関する指示が含まれています。これらのセクションの一部には、実行可能なマシンコードが含まれています(他のセクションには、プログラムデータ、リソース、再配置情報、インポート情報などが含まれています)。

Exeを実行するとどうなるかについての完全な説明については、 Windows Internals のコピーを入手することをお勧めします。

ネイティブ実行可能ファイルの場合、マシンコードはプラットフォーム固有です。 .exeのヘッダーは、.exeのプラットフォームを示します。

ネイティブの.exeを実行すると、次のことが起こります(大幅に簡略化されています)。

  • プロセスオブジェクトが作成されます。
  • Exeファイルがそのプロセスのメモリに読み込まれます。 .exeのさまざまなセクション(コード、データなど)は個別にマップされ、さまざまなアクセス許可が付与されます(コードは実行、データは読み取り/書き込み、定数は読み取り専用)。
  • .exeで再配置が発生します(.exeが優先アドレスにロードされていない場合、アドレスにパッチが適用されます)。
  • インポートテーブルがウォークされ、依存DLLがロードされます。
  • DLLは、.exeと同様の方法でマップされ、再配置が発生し、依存するDLLがロードされます。 DLLからインポートされた関数が解決されます。
  • プロセスは、NTDLLの初期スタブで実行を開始します。
  • 最初のローダースタブは、各DLLのエントリポイントを実行してから、.exeのエントリポイントにジャンプします。

管理対象の実行可能ファイルにはMSIL(Microsoft Intermediate Language)が含まれており、CLRがサポートする任意のCPUをターゲットにできるようにコンパイルできます。私はCLRローダーの内部動作(CLRをブートストラップしてMSILの解釈を開始するために最初に実行されるネイティブコード)にそれほど精通していません-おそらく他の誰かがそれについて詳しく説明することができます。

43
Michael

.exeファイルの最初の2バイトに含まれるもの-'MZ 'を教えてください。私は文字「MZ」を意味します。

それは実際に表しています:マーク・ズビコフスキー。 exeファイル形式を設計した人。

http://en.wikipedia.org/wiki/Mark_Zbikowski

14
kctang

1と0!

このウィキペディアのリンク は、Windowsアプリケーションで使用されるPortableExecutable形式で必要なすべての情報を提供します。

11
Nick Bedford

EXEファイルは、実際にはPortableExecutableと呼ばれるファイルの一種です。これには、プロセッサが読み取って実行できるバイナリデータが含まれています(基本的にx86命令)。ヘッダーデータやその他のコンテンツのlotもあります。実際の実行可能コードは.textというセクションにあり、マシン命令(プロセッサ固有)として保存されます。このコード(および.EXEの他の部分)はメモリに格納され、CPUがメモリに送信され、そこで実行が開始されます。 (実際にはもっと多くのインターフェースが発生していることに注意してください。これは簡単な説明です)。

2
Adrian Zhang