Portable Executable

Portable Executable (PE)から転送)

Portable ExecutablePE)は、主に32ビットおよび64ビット版のMicrosoft Windows上で使用される実行ファイル (EXE)、オブジェクトファイルDLL、SYS (デバイスドライバ)、FON フォントファイル等のファイルフォーマットである。PEフォーマットは実行コードを管理するためにWindows OSローダが必要とする情報をカプセル化するデータ構造である。エクステンシブル・ファームウェア・インターフェイス (EFI) の仕様ではPEをEFI環境における標準の実行形式としている[2]。このためUEFIアプリケーションや.NETアプリケーションのバイナリフォーマットとしても使用されている。マイクロソフト製OSとのマルチブート環境の構築を容易にする目的で、x86x86-64ARMアーキテクチャにおけるLinuxカーネル実行ファイル(EFI Boot Stub)[3]ブートローダなど、非Windows系OSのシステムファイルの一部でも用いられている。

Portable Executable
拡張子.acm, .ax, .cpl, .dll, .drv, .efi, .exe, .fon, .mui, .ocx, .scr, .sys, .tsp
MIMEタイプapplication/vnd.microsoft.portable-executable[1]
マジック
ナンバー
MZ 0x00(×10) PE 0x00 0x00
開発者マイクロソフト
種別バイナリ実行可能オブジェクト共有ライブラリ
派生元DOS MZ executable
COFF

Windows NTオペレーティングシステムでは、PEはIA-32IA-64x86x86-64 (AMD64/Intel 64)、ARMおよびARM64命令セットアーキテクチャ (ISA) がサポートされている。Windows 2000以前のWindows NTではMIPSAlphaおよびPowerPC命令セットアーキテクチャがサポートされていた。PEはWindows CEでも利用されていたため、MIPSのいくつかの種類、ARM (Thumbを含む)、SuperH命令セットアーキテクチャでもサポートが継続されている[4]

さまざまなCPUアーキテクチャに対応するため、内部に判別用のフラグを持っている。実行時にDLLを動的にリンクし、コンポーネントレベルでのバグフィックス、互換性の維持が行われるようになっている。また、リソース領域にアイコン等を格納でき、GUI上で表示された場合アイコンがグラフィカルに表示され、ソフトウェアが容易に判別できるようにできる。

PEと似たフォーマットとしてELFファイル(LinuxUnixで利用)や Mach-O (macOSiOSで利用)がある。

歴史

マイクロソフトはWindows NT 3.1オペレーティングシステムの登場とともにPEフォーマットに移行した。Windows 95/98/ME や Windows 3.1x上のWin32sをはじめとする、その後のWindowsはすべてPEをサポートしている。DOSとNTシステムのEXEフォーマットとの互換性を持たせるため、PE/COFFヘッダーにはMS-DOSプログラムがバイナリの先頭に組み込まれている。PEバイナリをMS-DOS上で起動させると、そのMS-DOSプログラムのほうが実行される。特に指定の無い場合、「This program cannot be run in DOS mode.」のような「DOSでは実行できない」というメッセージが表示するだけのプログラムが組み込まれる[5]。MS-DOSプログラムの後ろに、PE固有の識別子と、COFFに似たデータ構造があり、MS-DOSヘッダによってそのオフセットが指されている。

引き続きファットバイナリの形式である。PEは.NET PE形式や、PE32+ (もしくはPE+)と呼ばれる64ビットバージョン、およびWindows CE形式など、Windowsプラットフォームの変更にも対応し続けている。

対応する命令セットアーキテクチャ

  • x86:i386以降のインテルおよび互換CPUのアーキテクチャ。PEにおいては、その中でも32ビットのコードを対象としている。x86を対象とするWindowsアプリケーションが格納されたPEは、x86版、x86-64版、IA-64版Windowsで直接実行できる。ARM版Windowsにおいてはエミュレーションによって実行できる。Windows NT 4.0においては、AlphaMIPSPowerPC版においてエミュレータが存在した[6]。Xboxにおいては、ビルド途中の中間形式として採用されている[7]。i386版のUEFIアプリケーションの記述にも用いられている。
  • x86-64: 64ビット対応のx86命令。x64版Windowsで実行できる。x86-64版のUEFIアプリケーションの記述にも用いられている。
  • IA-64
  • Alpha: Alphaプロセッサ上で動作するWindows NTでのみ実行できる。Alpha版Windowsはすでに開発が終了している。
  • MIPS: Windows CE、Windows NTでサポートされていた。
  • PowerPC: PowerPC版Windows NTでのみ実行できる。Xbox 360でも内部的な形式として用いられている[8]
  • SH-3/4: Windows CEがサポートするアーキテクチャ。
  • ARM: Windows CE、Windows RTWindows 10でサポートされている。
  • AArch64 (ARM64): Windows 10でサポートされている。

技術的詳細

他のオペレーティングシステムでの利用状況

PEフォーマットはWindowsとのバイナリ互換を謳っているReactOSでも利用されている。過去にはSkyOSBeOS 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-32x86-64Linuxでは、WindowsDLLをloadlibraryで利用できる[9]

Mac OS X 10.5はPEファイルの読み込みと解析が可能だが、Windowsとバイナリ互換はない[10]

UEFIとEFIファームウェアはPEとWindows ABIをアプリケーションで使っている。

脚注

関連項目

外部リンク

🔥 Top keywords: メインページ宮崎麗果特別:検索豊後水道松本忠久土居志央梨若葉竜也能登半島地震 (2024年)田中雄士長谷部誠井上道義The GazettE若林志穂服部百音黒木啓司REITA虎に翼平井理央出口夏希サーブ (盲導犬)三鷹事件セウォル号沈没事故白眞勲三淵嘉子高橋克也 (オウム真理教)ME:Iルーシー・ブラックマン事件佐藤ありさ杉咲花蜜谷浩弥水野真紀亀井亜紀子 (政治家)熊本地震 (2016年)水原一平井川意高中川安奈 (アナウンサー)内藤剛志いなば食品YOSHIKI