実行可能

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

実行可能なリアルモードローダー16進ダンプ

コンピューティングでは、実行可能コード実行可能ファイル、または実行可能プログラム(単に実行可能ファイルまたはバイナリと呼ばれることもあります)により、コンピュータは「エンコードされた命令に従って指定されたタスクを実行する」[1]必要がありますプログラムによって意味がある と解釈(解析)されます。

正確な解釈は用途によって異なります。「命令」は、従来、物理CPUのマシンコード命令を意味すると解釈されます。[2]状況によっては、スクリプト命令(バイトコードなど)を含むファイルも実行可能と見なされる場合があります。

実行可能ファイルの生成

実行可能ファイルは機械語で手動でコーディングできますが、人間が簡単に理解できる高級言語でソフトウェアをソースコードとして開発する方がはるかに便利です。場合によっては、ソースコードが代わりにアセンブリ言語で指定されることがあります。これは、マシンコード命令と密接に関連付けられている間、人間が読める形式のままです。

高水準言語は、実行可能マシンコードファイルまたは実行不可能マシンコード(ある種のオブジェクトファイル)のいずれかにコンパイルされます。アセンブリ言語のソースコードでの同等のプロセスは、アセンブリと呼ばれます実行可能ファイルを作成するために、いくつかのオブジェクトファイルがリンクされています。オブジェクトファイル(実行可能かどうか)は通常、オペレーティングシステム固有のExecutable and Linkable Format(ELF)やPortable Executable(PE)などのコンテナ形式で保存されます。[3]これにより、生成されたマシンコードに構造が与えられます。たとえば、 .textなどのセクションに分割されます。(実行可能コード)、. data(初期化されたグローバル変数と静的変数)、および.rodata(定数や文字列などの読み取り専用データ)。

実行可能ファイルには通常、ランタイム言語機能(タスクスケジューリング例外処理、静的コンストラクタとデストラクタの呼び出しなど)とオペレーティングシステムとの相互作用(特に引数、環境の受け渡し、終了ステータスの返送など)を実装するランタイムシステムも含まれます。 、ファイルハンドルなどのリソースの解放などの他の起動およびシャットダウン機能と一緒にCの場合、これは、実際のエントリポイントを含み、ランタイムライブラリを呼び出すことによってセットアップとシャットダウンを行うcrt0オブジェクトにリンクすることによって行われます。[4]

したがって、実行可能ファイルには通常、特定のソースコードから直接生成されたもの以外に、重要な追加のマシンコードが含まれています。場合によっては、たとえば組み込みシステムの開発の場合や、単にコンパイル、リンク、およびロードがどのように機能するかを理解するために、これを省略することが望ましい場合があります。Cでは、これは通常のランタイムを省略し、代わりにリンカースクリプトを明示的に指定することで実行できます。リンカースクリプトは、エントリポイントを生成し、開始の呼び出しmainや終了時のカーネルへの終了ステータスの返送など、起動とシャットダウンを処理します。[5]

実行

システム(オペレーティングシステム、ファームウェアブートローダーなど)で実行するには、実行可能ファイルがシステムのアプリケーションバイナリインターフェイス(ABI)に準拠している必要があります。[6]単純なインターフェースでは、ファイルをメモリにロードし、アドレス空間の先頭にジャンプしてそこから実行することにより、ファイルが実行されます。より複雑なインターフェイスでは、実行可能ファイルには、個別のエントリポイントを指定する追加のメタデータがあります。たとえば、ELFでは、エントリポイントはヘッダーのe_entryフィールドで指定されます。このフィールドは、実行を開始する(仮想)メモリアドレスを指定します。GCC(GNUコンパイラコレクション)では、このフィールドはリンカーによって設定されます。_startシンボル。

も参照してください

参照

  1. ^ 「実行可能」メリアム・ウェブスターのオンライン辞書メリアム・ウェブスター2008年7月19日取得
  2. ^ 「機械の指示」GeeksforGeeks2015-11-03 2019年9月18日取得
  3. ^ 「第4章:オブジェクトファイル」refspecs.linuxbase.org 2019年9月18日取得
  4. ^ フィッシャー、ティム。「実行可能ファイル拡張子のリスト」lifewire.com 2019年9月18日取得
  5. ^ マッケラー、ジェシカ(2010-03-16)。「libcのない世界からこんにちは!(パート1)」
  6. ^ Boelen、Michael(2019-05-15)。「Linux上のELFファイルの101:理解と分析-Linux...」Linux監査2019年9月18日取得

外部リンク