| プログラム実行 |
|---|
| 一般的な概念 |
| コードの種類 |
| コンパイル戦略 |
| 注目すべき実行時間 |
| 注目すべきコンパイラとツールチェーン |
|

コンピューティングにおいて、実行可能ファイルは、コンピュータが動作を制御するために使用できるリソースです。コンピューティングにおけるすべての情報と同様に、実行可能ファイルはデータですが、制御フローを意味しないデータとは異なります。[ 2 ]実行可能コード、実行可能ファイル、実行可能プログラム、実行可能イメージなどの用語は、情報が表現され、保存される形式を表します。ネイティブ実行可能ファイルはマシンコードであり、 CPUの命令レベルで直接実行できます。[ 3 ] [ 4 ]スクリプトも実行可能ですが、インタプリタを介して間接的に実行されます。中間実行可能コード(バイトコードなど)は、ジャストインタイムコンパイルによって実行時に解釈またはネイティブコードに変換される場合があります。
ネイティブ実行可能ファイル
ネイティブ実行ファイルを機械語で直接記述することは技術的には可能ですが、一般的には行われません。ソフトウェアを人間が読めるソースコードとして開発し、ビルドツールチェーンを介して機械語の生成を自動化する方がはるかに便利です。今日では、ほとんどのソースコードは高級言語ですが、機械語命令と密接に関連するアセンブリ言語を使用することも依然として可能です。多くのツールチェーンは、ネイティブコードをオブジェクトファイルのセットとして生成するコンパイラと、オブジェクトファイルやその他のファイルからネイティブ実行ファイルを生成するリンカーで構成されています。アセンブリ言語の場合、通常、翻訳ツールはコンパイラではなく アセンブラと呼ばれます。
オブジェクトファイルは通常、コンピューティングコンテキストに応じて、実行可能およびリンク可能形式(ELF)やポータブル実行可能形式(PE)などのマシンコード内の構造をサポートするデジタルコンテナ形式で保存されます。 [ 5 ]この形式では、コードを.text(実行可能コード)、. data(初期化されたグローバル変数と静的変数)、. rodata (定数や文字列などの読み取り専用データ)などのセクションに分割することができます。
実行可能ファイルには通常、ランタイムシステムが含まれており、これはランタイム言語機能(タスクスケジューリング、例外処理、静的コンストラクタおよびデストラクタの呼び出しなど)とオペレーティングシステムとのやり取り(特に引数や環境の受け渡し、終了ステータスの返却)を実装するとともに、ファイルハンドルなどのリソースの解放などのその他のスタートアップおよびシャットダウン機能も実装します。 Cの場合、これは実際のエントリポイントを含み、ランタイムライブラリを呼び出してセットアップとシャットダウンを行うcrt0オブジェクトをリンクすることによって行われます。[ 6 ]そのため、実行可能ファイルには、ソースコードから直接生成されたコード以外にも重要なコードが含まれることがあります。組み込みシステムなどでは、これを省略することが望ましい場合があります。 Cでは、通常のランタイムを省略し、代わりにエントリポイントを生成し、startを呼び出して最後にカーネルに終了ステータスを返すなどのスタートアップとシャットダウンを処理するリンカースクリプトを明示的に指定することでこれを実現できます。[ 7 ]main
実行可能ファイルには、システムのアプリケーションバイナリインターフェース(ABI)に準拠している必要があります。単純なインターフェースでは、ファイルはメモリにロードされ、アドレス空間の先頭にジャンプしてそこから実行されます。[ 8 ]より複雑なインターフェースでは、実行可能ファイルに追加のメタデータが含まれ、プログラムのロード時に実行される再配置や、実行を開始するエントリポイントアドレスを指定する場合があります。[ 9 ]
参照
- 実行ファイル形式の比較
- 実行可能ファイルの圧縮 – 実行可能ファイルを圧縮する手段
- 実行可能テキスト – ソフトウェアの脆弱性を悪用するためのペイロードとして意図されたコードリダイレクト先の簡単な説明を表示するページ
- オブジェクトファイル – 再配置可能な形式のマシンコードを含むファイル
参考文献
- ^ポール・セロヴィ (2002)。埋め込み FreeBSD クックブック。エルゼビア。ページ108、187–188。ISBN 1-5899-5004-6. 2022年3月6日閲覧。
- ^ Mueller, John Paul (2007). Windows 管理コマンド ライン Windows Vista、Windows 2003、Windows XP、Windows 2000 . John Wiley & Sons . p. 24. ISBN 978-0-470-04616-6. 2023年3月6日閲覧。
- ^ "executable" . Merriam-Websterのオンライン辞書. Merriam-Webster . 2008年7月19日閲覧。
- ^ 「マシン命令」 . GeeksforGeeks . 2015年11月3日. 2019年9月18日閲覧。
- ^ 「第4章: オブジェクトファイル」 . refspecs.linuxbase.org . 2019年9月18日閲覧。
- ^ Fisher, Tim. 「実行可能ファイル拡張子一覧」 lifewire.com 2019年9月18日閲覧。
- ^ McKellar, Jessica (2010-03-16). 「libcフリーの世界からこんにちは!(パート1)」 .
- ^ Smith, James E. ; Nair, Ravi (2005-05-16). 「仮想マシンのアーキテクチャ」 . Computer . 38 (5): 33– 34. doi : 10.1109/MC.2005.173 .
- ^ Rusling, David A. (1999). 「第4章 プロセス」 . Linuxカーネル. sec. 4.8.1 – ELF . 2023年3月6日閲覧。