仕事の8週目で2019-2020-1 20199329「Linuxカーネルの原理と分析」

仕事の8週目で、「Linuxカーネルの原理と分析」


。コンテンツの一週間:

  • コンパイルとELF実行可能ファイル形式のリンクのプロセスを理解します
  • ダイナミックリンクライブラリプログラミング演習を使用するには、2つの方法
  • execveのカーネルのシステムコールハンドラsys_execveを使用してGDBの微量分析

。学習コンテンツの二週間:

コンパイルとELF実行可能ファイル形式のリンクのプロセスを理解する1

ELF(実行可能リンク形式)オブジェクトファイル(オブジェクトファイル)の種類を定義する形式のオブジェクトファイルには、何かを入れて、これらの事を置くにどのような形式にされているされています。それは最初のSystem Vシステムに登場しているので、広くデフォルトのバイナリファイルフォーマットとして使用するために、世界のxNIXによって受け入れられています。
いわゆるオブジェクトファイル(オブジェクトファイル)3つのカテゴリがあります。

  • 再配置可能オブジェクトファイル(再配置可能ファイル)
  • 実行可能なオブジェクト・ファイル(実行ファイル)
  • オブジェクトファイル(共有オブジェクトファイル)を共有することができる
    :ELFファイル形式が示されている

    ELFファイルは、4つの部分、すなわち、ELFヘッダ(ELFヘッダ)、プログラム・ヘッダ・テーブル(プログラム・ヘッダ・テーブル)、セクション(セクション)とセクションから構成されヘッダテーブル(セクション・ヘッダ・テーブル)。実際には、ファイル必ずしも全体の内容が含まれていないが、図示のように、その位置がそのように構成されなくてもよい、ELFヘッダーの位置のみが固定され、残りの部分の位置、大きさ、および他の情報は、ELFヘッダー内の値を有します決定します。

ELFファイル:ELF(ExcutableとリンクFormat)は、標準のファイル形式です。ビューはreadelfが時間のハローによって実行ファイルこんにちはヘッド(のみヘッダ情報を見て、-H、利用可能なすべてのデータを見る-a)の頭部は、ターゲット・ファイル・タイプELF32を示します。エントリ・ポイント・アドレスは、プログラムのエントリアドレス0x400440です

2.実験棟実験:GDBはexecveカーネルのシステムコールハンドラを使用してフォローアップ分析

機能の役割のExecの家族は、実行可能ファイルの指定したファイル名を検索し、呼び出し元プロセスの内容を置き換えるためにそれを使用することで、他の言葉で、呼び出し元のプロセス内の実行可能ファイルの実装です。ここでは、そのファイルはシェル、シェルの実行と解釈、実行可能ファイルは、任意のLinuxでバイナリファイルまたはスクリプトファイルを実行可能のいずれかになりますそれがない場合は、ファイルを実行することができます。

  • メニュー更新のLinux /カーネル、およびtest_exec test.cの下のに
    練習ショット次のとおりです。
  • EXECコマンドは、カーネルに追加するかどうかを確認するためにカーネルに
    以下のように練習ショットであります:
  • 横画面は、GDB追跡他の端末を行う開く
    file linux-3.18.6/vmlinux remote target:1234
    練習ショットを以下の通りです。
  • Sys_execveの場所に配置された他のブレークポイント、シングルステップと
    実践ショットは次の通りであります:


  • 最後に、EIFのハローヘッドの状態を確認することができ試運転終了後にredelf -hハローを入力
    として、以下のある練習ショットを:
  • ELFヘッダ解析
    可視ELFヘッダのサイズを分析する前に、52バイト、リードコマンド六角ダンプ52バイトで
    hexdump –x hello –n 52
    練習ショットは次の通りである:

    分析:
    最初の行、e_identのに対応する[EI_NIDENT]。リトルエンディアンの実際のコンテンツは、(0x46のが「E」、「L」であり、0x45,0x4c 7f454c46010101000000000000000000、固定エルフ7f454c46の初めに最初の4つのバイトとして表現 「F」 ELFオブジェクトを表し、符号化されたASCII文字に対応します)。次のバイト01は、次の表現は、リトルエンディアンのバイト01はその後、次のバイト01は、ファイルヘッダのバージョンを示し、法律を表す、32ビットのオブジェクトを表します。残りのデフォルト値は0に設定され
    、第二のライン、0×0002のe_type値を実行可能ファイルを示します。e_machine値0x0003は、intel80386プロセッサアーキテクチャを表します。e_version値0x00000001のは、現在のバージョンを表します。e_entry値0x04080a8d、エントリポイントを表します。e_phoff値0x00000034は、プログラムヘッダーテーブルは、オフセットを表す52バイト0x34のすなわち正確ELFヘッダサイズです。
    第三行、セクションヘッダテーブルのオフセットアドレスを示すe_shoff値0x000a20f0、。e_flags値0x00000000の、未知のプロセッサを示す特定のフラグ。e_ehsize値0x0034、ELFファイルヘッダは52バイトの大きさを示しています。e_phentsizeエントリは、プログラムヘッダテーブル(塗布ヘッド)の長さを示し、すなわち0x0020にの値は32バイトです。e_phnumは値0x0006は、プログラム・ヘッダ・テーブルのエントリ数を所与。0x0028のe_shentsize値は、セクション・ヘッダ・テーブル・エントリ(ヘッダ部)サイズは40バイトであることを示します。
    4行目、e_shnumを値0x001f、入り口31を示すセクションヘッダテーブル。e_shstrndx値0x001cは、セクション名文字列テーブルセクションのテーブル内のインデックス番号を表します。

III。まとめと難しいです

先週の実験を学ぶ、私はフォーク()シングルステップ実行の数を学び、構造フォーク()関数を見ました。今週学習の構造のexec()関数のように、私が見て、分析されています:execve_共通DO_ DO_ execveの呼び出しを、しかしexecve_共通のDO_、主にexec_ binprmに依存している、もう一つの重要なのでexec_ binprmにあり機能、search_binary_ハンドラと呼ばれます。これは、内部sys_execve処理です。
プロセスファイル処理は、次のとおりです。

  • 前処理:gccを-E -o HELLO.CPPのhello.c -m32(に含まれているファイル、マクロ置換が含まれるための責任)。
  • コンパイル:GCC -x CPP-出力-S hello.s -o HELLO.CPP -m32(GCC -SコールCCL、アセンブリコードにコンパイル)。
  • コンパイル:gccの-xアセンブラ-c hello.s -o hello.o;(としてのgcc -c呼び出し、バイナリファイルを取得するため)。
  • リンク:gccの-o hello.oこんにちは、gccの-o(LDコールは、ターゲットの実行可能ファイルを形成します)

IV。来週プログラム

  • 完了時に[]放課後練習帳
  • []カーネル仮想マシン環境の研究を継続して使用します

2019年11月8日

おすすめ

転載: www.cnblogs.com/Zxf313806994/p/11823542.html