| この記事の要点 |
|
概要
.exe(executable の略)は、Microsoft Windows でプログラムを実行するための最も基本的なファイル形式です。アプリケーションのインストーラ、ゲーム、ユーティリティ、自作のスクリプトを変換した実行ファイルまで、Windows 上で「ダブルクリックで動く」ものの大半は .exe としてパッケージされています。
歴史的には MS-DOS 時代に登場した古典的な MZ 形式(DOS EXE)にさかのぼり、Windows 3.x で NE(New Executable)、Windows NT 以降で PE(Portable Executable)へと進化しました。現在の Windows 10 / 11 で配布される .exe はほぼ例外なく PE32(32bit)または PE32+(64bit)です。互換性のため、PE ファイルの先頭には今でも MZ ヘッダが残されており、古い OS で実行すると「This program cannot be run in DOS mode」と表示される短い DOS スタブが埋め込まれています。
.exe は単体で動作するように見えますが、多くの場合は DLL(.dll) など外部ライブラリに依存しています。インストーラの実体である MSI(.msi) を内部にラップした セットアップ .exe も一般的です。
内部構造
PE 形式の .exe は、先頭から以下のように構造化されています。
- DOS ヘッダ(IMAGE_DOS_HEADER): 先頭 2 バイトがマジックナンバー
4D 5A(ASCII で "MZ")。最後のフィールドe_lfanewが PE ヘッダの位置を指す - DOS スタブ: 「This program cannot be run in DOS mode.」と表示するだけの小さな 16bit プログラム
- PE シグネチャ:
50 45 00 00("PE\0\0") - COFF ファイルヘッダ(IMAGE_FILE_HEADER): マシンタイプ(x86 / x64 / ARM64)、セクション数、タイムスタンプ等
- オプショナルヘッダ(IMAGE_OPTIONAL_HEADER32 / 64): エントリポイント、イメージベース、サブシステム(GUI / Console)、必要 OS バージョン等。PE32 / PE32+ の区別はここで行う
- セクションテーブル:
.text(コード)、.data(初期化済みデータ)、.rdata(読み取り専用)、.rsrc(リソース)、.reloc(再配置情報)等 - IMAGE_NT_HEADERS: PE シグネチャ + COFF ヘッダ + オプショナルヘッダをまとめた論理単位
セクション内には、文字列、アイコン、バージョン情報、マニフェスト XML(UAC レベルや DPI 設定)まで埋め込まれています。Resource Hacker や PE Explorer などのツールで覗くと、アイコン画像や多言語リソースが見えます。
主な用途
- アプリケーション本体: notepad.exe、chrome.exe、explorer.exe など、Windows 上のあらゆる GUI/CUI アプリ
- インストーラ: setup.exe、install.exe。内部に圧縮されたファイル群と展開ロジックを持ち、最終的に MSI を呼び出すパターンも多い
- ゲーム / ランチャー: Steam クライアントや各ゲーム本体
- ポータブルアプリ: インストール不要で USB メモリから起動できるタイプ。レジストリを汚さない
- スクリプトのバイナリ化: PyInstaller / Nuitka(Python)、pkg(Node.js)、AutoHotkey 等で生成される単体 .exe
関連形式との比較
| 形式 | OS | 用途 | 特徴 |
|---|---|---|---|
| .exe (PE) | Windows | 実行ファイル | MZ ヘッダ + PE ヘッダ。GUI/CUI 両対応 |
| .dll | Windows | 動的リンクライブラリ | 同じ PE 形式だが単独実行不可 |
| .msi | Windows | インストーラ | OLE 構造化ストレージ。msiexec が解釈 |
| ELF | Linux/Unix | 実行ファイル | マジック 7F 45 4C 46 |
| Mach-O | macOS | 実行ファイル | .app バンドル内に格納される |
コマンド・ツール
- signtool.exe: コード署名の付与・検証。
signtool verify /pa app.exe - dumpbin.exe(Visual Studio 付属): PE ヘッダ、エクスポート、インポートを表示
- PE-bear / CFF Explorer: PE 構造を GUI で可視化
- Process Explorer: 起動中の .exe のロード DLL、ハンドル、署名状況を確認
- PowerShell でハッシュ確認:
Get-FileHash app.exe -Algorithm SHA256 - Mark of the Web の解除:
Unblock-File app.exe
注意点
- マルウェアの主要媒体: トロイの木馬、ランサムウェアの多くが .exe として配布される。出所不明な .exe は実行しない
- SmartScreen / Defender: インターネット経由でダウンロードした .exe には Mark of the Web(Zone.Identifier ADS)が付与され、初回実行時に警告が出る。これを軽率に解除しない
- コード署名の確認: プロパティ → デジタル署名タブで発行元を確認。署名なし、または "Unknown Publisher" の場合は警戒
- 互換性: 32bit .exe は 64bit Windows で WOW64 経由で動くが、64bit .exe は 32bit Windows で動かない
- アンチウイルスとの相性: PyInstaller で作った自作 .exe が誤検知されることがある。署名 + 評判蓄積で改善
- UAC(ユーザーアカウント制御): 管理者権限が必要な .exe は manifest に
requireAdministratorを書き、起動時に昇格プロンプトが出る
関連リンク
- 実行ファイル・パッケージ(親カテゴリ)
- ファイル拡張子とは(概論)
- DLL(.dll) — .exe とセットで動的リンクされる
- MSI(.msi) — Windows 標準インストーラ形式
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09