Portable Executable(PE)とは
Portable Executable(PE)形式は、主に
Microsoft Windowsの
32ビットおよび
64ビット版で使用される
実行ファイルのフォーマットです。この形式は、実行可能なプログラム(EXE)、
オブジェクトファイル、
ダイナミックリンクライブラリ(DLL)、
デバイスドライバ用のSYSファイル、およびフォントファイル(FON)などをサポートしています。PEフォーマットは、Windows
オペレーティングシステムのローダーが必要とする情報を整理されたデータ構造として包み込む役割があります。
PEは、エクステンシブル・ファームウェア・インターフェイス(EFI)の仕様に従い、EFI環境においての標準実行形式として使用されています。このことにより、UEFIアプリケーションや.NETアプリケーションの
バイナリフォーマットとしても活用されています。さらに、PEは非Windows系のOSでも利用されており、特にマルチブート環境の構築を容易にするために、
Linuxカーネルやブートローダーといったファイルでも採用されています。
PEフォーマットの仕様
Windows NT
オペレーティングシステムでは、PEは
IA-32、
IA-64、x86、x86-64(AMD64/Intel 64)、ARMおよびARM64といった命令セットアーキテクチャ(ISA)をサポートします。これに対して、Windows 2000以前のヴァージョンではMIPS、Alpha、
PowerPCアーキテクチャもサポートされていました。Windows CEでもPE形式が利用され、MIPSやARM、
SuperHアーキテクチャも引き続きサポートされています。
PEフォーマットは、様々な
CPUアーキテクチャに対応するため、内部に識別用のフラグを持ち、実行時にはDLLを動的にリンクします。これにより、
ソフトウェアのバグ修正や互換性を維持することが可能です。また、
アイコンなどのリソースを保存でき、GUI上ではこれらの
アイコンが視覚的に表示され、ユーザーは容易に
ソフトウェアを識別できるようになります。
PEの歴史
PEフォーマットは、1993年に
マイクロソフトがWindows NT 3.1を発表した際に導入され、その後の全てのWindows
オペレーティングシステムでサポートされてきました。特に、Windowsの互換性を保ちつつ、マルチプラットフォームでの利用を考慮されて設計されています。PEフォーマットには、既存のDOSとNTシステムのEXEフォーマットとの互換性を持たせるために、
MS-DOSプログラムがファイルの先頭に組み込まれています。これにより、PE
バイナリを
MS-DOS上で実行した場合、最初にこのプログラムが実行されます。
対応アーキテクチャ
PEは、特定の命令セットアーキテクチャに対応しており、例えばx86アーキテクチャでは
32ビットのコードを対象としており、Windowsアプリケーションが格納されたPEファイルはx86版、x86-64版、
IA-64版Windowsで直接実行できます。一方で、ARM版Windowsではエミュレーションを利用して実行されます。また、Xboxプラットフォームでも、PE形式が内部的に使用されています。
他のOSでの利用状況
PEフォーマットは、
ReactOSのような他の
オペレーティングシステムでも利用されています。かつてはSkyOSや
BeOS R3など他のOSでも採用されていたが、その後ELF形式に移行しました。一方、Mono開発環境は、Microsoftの
.NET Frameworkとの互換性を持つためPEフォーマットを使用しており、
Unix系OSでは
Wineを通じてWindows
バイナリを実行することが可能です。さらに、HX DOS Extenderを利用することで、
32ビットDOS
バイナリにPE形式を使用することができ、DOS版
Wineのような用途が展開されています。
結論
Portable Executable(PE)は、その柔軟性と互換性に優れ、Windowsプラットフォームはもちろん、他の
オペレーティングシステムにおいても幅広く使用され続けています。PEフォーマットの進化は、今後も注目されることでしょう。