実行可能プログラムの動作
ノートを読みます
- ELF(Excutableと書式のリンク)とフォーマットの実装、標準オブジェクト・ファイル・フォーマットにリンクすることができます。
- 再配置可能なファイルは:ソースコードファイルを再配置可能なファイル(.oファイル)を生成するために、すべてのファイルが.oファイル---- Linuxカーネルにリンクされます。
- 実行可能ファイル:一般的に結合再配置可能なファイル生成複数の実行のためのプログラムを保持している(解析され、ランタイムライブラリのシンボルを共有除く)作業の再配置とシンボル解像度ファイルをすべて完了しています。
- 共有オブジェクトファイル:「実行可能」ファイルのない主な機能、機能の唯一の山は、他の実行可能ファイルが利用できる呼び出します。(する.soファイル)。
- ELF形式
- ELFファイルのインデックステーブル
- ELFは、さまざまなセクションのメインファイルです。
- ELFは、さまざまなセクションのメインファイルです。
- ヘッダ構造
- e_identの第5バイト配列は、64ビット2が示す、32ビットを表します。
- e_typeはe_type値が再配置可能ファイル、実行可能ファイル、共有オブジェクト・ファイルとコアファイルを表す1,2,3,4 ELFファイルタイプを反映しています。
- セクションヘッダ構造
- 説明ファイル
- ターゲットファイルは、ヘッドテーブル領域をリンクするためのセクションが含まれている必要があります
- プログラムヘッダーの構造
- セクションヘッダテーブルと作成プロセス関連
- イメージファイルを構築するために使用されるプロセスは、セクションヘッダーテーブルを有していなければなりません
- ELFファイルのインデックステーブル
コンパイルされました
- 前処理:GCC -Eこんにちは.C -oこんにちは.I
- 编译:gccの-Sハロー.I -oこんにちは.S
- 汇编:gccの-cこんにちは.S -oハローの.o
- 链接:gccのhello.o -oハロー
- 静的リンクは:直接コンパイルコードでリンクコピー外部環境の実行速度が速くなり、低依存、最終的な実行可能ファイル、高速な読み込み速度コードの利点を実行するために必要。欠点は、複数のアプリケーションが同じライブラリ関数を使用する場合は、メモリを無駄に、複数回ロードすることができるということです。
ダイナミックリンクは:直接コンパイル時に、しかしプログラムは、オペレーティングシステムをロードするために実行したり、この情報を渡しているとき、シンボルと一連のパラメータを記録することにより、実行可能なコードをコピーしないでください。プログラムがすでにコードを実行するためにメモリにロードされた動的な共有ライブラリを実行し、最終的には、リンクの目的が実行されている達成するために指定されたコードを実行されると、オペレーティングシステムがメモリにロードするために必要な動的なライブラリを担当しています。利点は、複数のプログラムがディスク上に複製を複数格納することなく、コードの同じ部分を共有することができるということです。欠点はなく、高いライブラリの依存関係を使用するため、プログラムの初期の実装のパフォーマンスに影響を与える可能性があり、実行時にロードされます。ダイナミック・リンク・ロードおよび動的にリンクされた実行時。 - exec関数:システムが実行を(sys_execveと呼ばれる実行可能ファイルを実装し、本質的に、機能を実行するための実行ファイル)。
- 调用关系:sys_execve() - > do_execve() - > do_execve_common() - > exec_binprm() - > search_binary_handler() - > load_elf_binary() - > start_thread()
- フォークとはexecve区別と接続
- 彼らは特別なシステムコールです
- カーネルモードにフォークが親プロセスの元の位置に戻るには初めてダウン引き続き、二回戻ってきた後、第二には、通常のユーザモードに戻り、その後、子を返すにret_from_forkに戻りました。
- それが戻ったときに、カーネルはexecveで実行可能ファイルを呼び出して、カーネルモードの実装に巻き込まはexecveは、現在のプロセスをカバーするために実行可能なプログラムをロードし、リターンは元の実行可能プログラムではなく、新しいものではありません新しい実行可能プログラムの開始点に戻る、すなわち、メイン関数(典型的には、アドレス0x8048xxx、コンパイラによってセット)のおおよその位置。
- カーネルは、ファイルがリストにカーネルモジュールのこのファイル形式を解析する方法を探して、どのような形式を決定することです、それはファイルの先頭をロードし、execveの実行で、マルチフォーマットをサポートしています。
- 调用关系:sys_execve() - > do_execve() - > do_execve_common() - > exec_binprm() - > search_binary_handler() - > load_elf_binary() - > start_thread()