コンテンツにスキップ

実行ファイル

出典: フリー百科事典『ウィキペディア(Wikipedia)』
リアルモードブートローダーの16進数ダンプ

実行ファイル(じっこうファイル、英: Executable file)とは、オペレーティングシステムによってメモリに読み込まれ、CPUが命令を処理することでプログラムとして動作するファイルである[1]。

実行可能ファイル、実行可能プログラム、実行形式ファイルとも呼ばれる。また、多くの場合その実体がCPU固有の機械語命令を格納したバイナリファイルであることから、単にバイナリ(ファイル)と称されることもある[2]。

機械語命令を格納したネイティブバイナリが実行ファイルの典型だが、広義には、インタプリタを介して動作するシェルスクリプトやバッチファイルも実行ファイルと呼ばれることがある。実行ファイルの形式はOSごとに定められており、WindowsではPortable Executable(PE)形式(拡張子 .exe など)、Linux・UNIX系OSではExecutable and Linkable Format(ELF)形式が標準的に用いられる。ファイルが実行可能かどうかは、拡張子またはOSのアクセス権限フラグ(Unix系OSではパーミッションビット)によって識別できる。

実行ファイルの生成

[編集]

実行ファイルは人間が理解しやすい高水準言語のソースコードとしてソフトウェアを開発する方が格段に楽であるが、機械語を手組みすることも可能である。場合によっては、人間が解読可能であるものの機械語の命令セットと密に関連しているアセンブリ言語をソースコードとして使うこともある。高水準言語は実行可能な機械語ファイルか実行可能ではないオブジェクトファイルにコンパイルされる。アセンブリ言語の場合はこの過程をアセンブルと呼ぶ。オブジェクトファイルをいくつかリンクして実行ファイルを作成する。オブジェクトファイルは実行可能かにかかわらず、一般にELF等のコンテナフォーマットに保存され[3]、生成された機械語は.text(実行コード)セクション、.data(静的変数)セクション、.rodata(静的定数)セクション等に分割され構造化される。

オペレーティングシステム、ファームウェア、ブートローダ等のシステムによって実行されるには、実行ファイルはシステムのABIに従う必要がある[4]。もっとも単純な形としては、ファイルをメモリに読み込みアドレス空間の最初に移動してそこから実行することであるが、より複雑な場合は実行ファイルには別々のエントリーポイントを指定する追加のメタデータが付属する。例えば、ELFではエントリーポイントはヘッダーのe_entryフィールドに格納されており、実行を開始する(仮想)メモリアドレスを指定している。GCC(GNUコンパイラコレクション)では、このフィールドは_startシンボルによりリンカによって指定される。

実行ファイルには通常ランタイムシステムも含まれており、ランタイム言語機能(タスクスケジュール、例外処理のハンドル、静的コンストラクタやデストラクタの呼び出し等)や特定のオペレーティングシステムのシステムコールを呼び出し、引数や環境変数を渡し戻り値を得る命令セット、そしてファイルハンドル等のリソースを解放して開始/終了処理を行う機能が含まれる。C では、実際のエントリーポイントを含みランタイムライブラリを呼び出し開始/終了処理を行う crt0 オブジェクトをリンクすることで実現している[5]。

実行ファイルには実行に必要な環境についての情報、デバッグ情報、シンボル情報など、ソースコードから生成される機械語プログラム自体に含まれない情報も多く格納されることがある。場合によっては、例えば組込みシステムの開発やコンパイル、リンク、ローダの動作を単純に学習したい場合等、これを省略したい場合がある。C では、通常のラインタイムを省略することができ、その代わりに明示的にリンカスクリプトを指定し、エントリーポイントを生成してmainを呼び出したりカーネルに終了コードを返すといった開始/終了処理を行う[6]。

実行ファイルはプロセッサ固有であるだけでなくオペレーティングシステム固有でもある。

実行ファイル形式

[編集]

実行ファイル形式は実行ファイルのためのファイル形式、すなわちプログラムを実行ファイルとして収納する形式である。コンテナフォーマットの一種。

一定の規格に沿ってプログラムがファイル内に配置されることで、プロセッサ・OSが実行ファイルをロードできる。ゆえに各実行プラットフォームは対応する実行ファイル形式を定めている。以下はその一例である。

表. 主要な実行ファイル形式
実行ファイル形式 拡張子 利用プラットフォーム
ELF Linux
Mach-O macOS, iOS
PE .exe Windows
Dalvik Executable .dex Android、Google Chrome OS

脚注

[編集]
  1. ↑ “executable”. Merriam-Webster's Online Dictionary. Merriam-Webster. 2008年7月19日閲覧。
  2. ↑ “Machine Instructions” (英語). GeeksforGeeks (2015年11月3日). 2019年9月18日閲覧。
  3. ↑ “Chapter 4: Object Files”. refspecs.linuxbase.org. 2019年9月18日閲覧。
  4. ↑ Boelen, Michael (2019年5月15日). “The 101 of ELF files on Linux: Understanding and Analysis - Linux...” (英語). Linux Audit. 2019年9月18日閲覧。
  5. ↑ content, Tim Fisher Tim Fisher has 30+ years' professional technology support experience He writes troubleshooting. “List of Executable File Extensions” (英語). Lifewire. 2019年9月18日閲覧。
  6. ↑ McKellar, Jessica (2010年3月16日). “Hello from a libc-free world! (Part 1)”. 2019年9月18日閲覧。

関連項目

[編集]

外部リンク

[編集]