| 拡張子 | .acm, .ax, .cpl, .dll, .drv, .efi, .exe, .fon, .mui, .ocx, .scr, .sys, .tsp |
|---|---|
| MIMEタイプ | application/vnd.microsoft.portable-executable |
| マジック ナンバー | MZ 0x00(×10) PE 0x00 0x00 |
| 開発者 | マイクロソフト |
| 種別 | バイナリ、実行可能、オブジェクト、共有ライブラリ |
| 派生元 |
DOS MZ executable COFF |
Portable Executable(PE)は、主にMicrosoft Windows系オペレーティングシステムにおいて実行ファイルやライブラリなどを格納するために用いられるバイナリファイル形式である。
Windows環境における標準的な実行形式として、アプリケーション本体(EXEフォーマット)、ダイナミックリンクライブラリ(DLL)、デバイスドライバなどの配布および起動に利用される。PEファイルには、プログラムコードやデータの配置情報、外部ライブラリの参照情報、アイコンなどのリソースが構造化して記録されており、OSローダがそれらを解釈してメモリ上に展開することで実行が行われる。
また、複数のCPUアーキテクチャに対応する設計を持ち、拡張ファームウェアインターフェイス(EFI)環境などWindows以外の実行基盤でも利用されている。
Windows NTオペレーティングシステムでは、PEはIA-32、IA-64、x86、x86-64 (AMD64/Intel 64)、ARMおよびARM64命令セットアーキテクチャ (ISA) がサポートされている。Windows 2000以前のWindows NTではMIPS、 AlphaおよびPowerPC命令セットアーキテクチャがサポートされていた。PEはWindows CEでも利用されていたため、MIPSのいくつかの種類、ARM (Thumbを含む)、SuperH命令セットアーキテクチャでもサポートが継続されている。
さまざまなCPUアーキテクチャに対応するため、内部に判別用のフラグを持っている。実行時にDLLを動的にリンクし、コンポーネントレベルでのバグフィックス、互換性の維持が行われるようになっている。また、リソース領域にアイコン等を格納でき、GUI上で表示された場合アイコンがグラフィカルに表示され、ソフトウェアが容易に判別できるようにできる。
マイクロソフト製OSとのマルチブート環境の構築を容易にする目的で、x86、x86-64、ARMアーキテクチャにおけるLinuxカーネル実行ファイル(EFI Boot Stub)やブートローダなど、非Windows系OSのシステムファイルの一部でも用いられている。
PEと似たフォーマットとしてELFファイル(LinuxやUnixで利用)や Mach-O (macOSやiOSで利用)がある。
マイクロソフトはWindows NT 3.1オペレーティングシステムの登場とともにPEフォーマットに移行した。Windows 95/98/ME や Windows 3.1x上のWin32sをはじめとする、その後のWindowsはすべてPEをサポートしている。DOSとNTシステムのEXEフォーマットとの互換性を持たせるため、PE/COFFヘッダーにはDOSプログラムがバイナリの先頭に組み込まれている。PEバイナリをDOS上で起動させると、そのDOSプログラムのほうが実行される。特に指定の無い場合、「This program cannot be run in DOS mode.」のような「DOSでは実行できない」というメッセージが表示するだけのプログラムが組み込まれる。DOSプログラムの後ろに、PE固有の識別子と、COFFに似たデータ構造があり、DOSヘッダによってそのオフセットが指されている。
引き続きファットバイナリの形式である。PEは.NET PE形式や、PE32+ (もしくはPE+)と呼ばれる64ビットバージョン、およびWindows CE形式など、Windowsプラットフォームの変更にも対応し続けている。
PEフォーマットはWindowsとのバイナリ互換を謳っているReactOSでも利用されている。過去にはSkyOSやBeOS R3等いくつかのオペレーティングシステムで利用されていたが、SkyOSもBeOSも最終的にはELFへ移行した。
Mono開発環境はMicrosoft .NET Frameworkとのバイナリ互換を謳っており、マイクロソフトの実装と同じPEフォーマットを利用している。
x86 Unix系 オペレーティングシステムでは、Windowsバイナリ(PEフォーマット)はWineを通して実行できる。HX DOS ExtenderもDOS 32ビットバイナリにPEフォーマットを利用しており、一部の既存WindowsバイナリをDOSで実行できるため、DOS版Wineとして利用できる。
IA-32とx86-64のLinuxでは、WindowsのDLLをloadlibraryで利用できる。
Mac OS X 10.5はPEファイルの読み込みと解析が可能だが、Windowsとバイナリ互換はない。