| この記事の要点 |
|
概要
.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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15