PWN日記Day21「プログラマの自己修養」の研究ノートを学びます

LinuxカーネルのロードプロセスELF

(1)bashのプロセスがフォークを呼び出し()システムコールは、新しいプロセスを作成し、
(2)新たなプロセスは、指定されたELFファイルを実行するためにはexecve()システムコールを呼び出し、元のbashプロセスは、わずか開始するのを待つために新しいプロセスを返すために続けて、その後、継続しますユーザ入力コマンドを待ちます。
それぞれの入口(3)はexecve()システムコールの後sys_execve()、sys_execveは())do_execve(コール、一部重複パラメータチェックです。
(4)do_execve())(search_binary_handleを呼び出し、ファイルヘッダの128のバイトを読み取ります。
(5)search_binary_handle()ファイル形式は、マジックナンバーによって決定され、適切なロード処理を呼び出す:
このようなマジックナンバー、中間ヘッドのプログラム番号として1チェック有効ELF実行形式、。
動的リンク2.ルック「のinterp。」セクションには、ダイナミックリンカのパスを設定します。
そのようなコード、データ、読み出し専用データとしてプログラム・ヘッダ・テーブル実行ELF、ELFファイルマッピングの説明。
このようなプロセスはDT_FINIアドレスでなければなりませんEDXレジスタのアドレスを開始したときなど4. ELFの初期化プロセス環境、。
前記システムコールは、ELF実行可能ファイルに変更されたエントリ・ポイントのアドレスを返し、プログラムのエントリーポイントがリンクモードに依存して、静的にリンクされたELF実行可能ファイル、アプリケーションファイルは、ELFファイルの入口ヘッダがe_entryを呼ばれますアドレス、プログラムのエントリポイントがダイナミックリンカで、動的にリンクされたELF実行可能ファイルを頼みます。
(6)ステップアピール実行、バックsys_execve do_execve()への復帰は、システムコールがロードされるELFプログラムのアドレスへのエントリ・アドレスを返し、そうときにユーザモードにカーネルモードからsys_execve()システムコールの戻りEIPレジスタは、エントリアドレスELFプログラムに直接ジャンプするときに、その新しいプログラムは、実行、実行可能ファイルのELFのロードの完了を開始します。

ロードおよび実行可能ファイルの章の概要を処理

この章では、あるプログラムが実行されているメモリ空間、プロセスの仮想アドレス空間を使用する方法について説明します。次に、どのようにオペレーティングシステムによってプログラムについては、実行するためにメモリにロードされ、表紙のマッピングモードに導入され、プロセスのアドレス空間の利点をマップし、どのようにオペレーティングシステムの観点からプロセスを観察するマッピングプログラムを介してページ解析プログラムがそのように実行しているときに発生するページフォルトを処理する方法を、確立されています。
また、プログラムのコードのためにどのようにオペレーティングシステム、仮想アドレス空間分布を詳細データ、ヒープ、それらがどのように分布しているか、プロセスのアドレス空間に割り当てを積み重ねます。最後の2つの章どのようにLinuxとWindowsのプログラムのロードとELFにPEプログラムを実行するにはそれぞれの洞察力。本章では、プログラムが静的にリンクされていることを、彼らは唯一の実行可能モジュールを持っていると仮定します。

位置独立コードの概要

  • 相対ジャンプとコール:内部コマンドモジュールは、呼び出しをジャンプ
  • 内部データモジュールアクセス:アクセス相対アドレス
  • 通話と間接ジャンプ(GOT):外部コマンドモジュールは、ジャンプを呼び出します
  • 外部データ・アクセス・モジュール:間接アクセス(GOT)

知識雑則:

  • bashのプロセス:シェルプロセスで、各ユーザはbashのこのプロセスを記録した、時には、上記の端末でログインすると、Linuxシステムは、ユーザーにシェルを与える、シェルはbashのプロセスである(デフォルトのシェルがあるときその後、bashの)、および、以下のコマンドを実行したときに、プログラムを開始するには、コマンドラインのほとんどの親であるので、それを終了しないので、あなたは、子プロセスそのbashのプロセスです。
  • フォーク()関数:プロセスがフォーク()を呼び出し関数の後、システムは、データ及びコードを格納するスペースなど新たなプロセスを与えるためにリソースを割り当てます。その後、元のすべての値は、新しいプロセスの新しいプロセスにコピーされ、元のプロセスと異なる値だけでいくつかの値。自分自身のクローンの同等。
  • execve()関数:はexecve(実行ファイル)は、子プロセスをfork子プロセス親プロセスで新しいプログラムを開始するには、exec関数を呼び出します。カーネルレベルのシステムである6つのexec関数の合計はexecveを呼び出し、他の(EXECL、execle、のexeclp、EXECV、execvpの)はライブラリ関数はexecveを呼び出しています。
  • DLL(ダイナミックリンクライブラリ)ファイル:また、「開発するアプリケーション」として知られているダイナミックリンクライブラリファイルは、ソフトウェアのファイルタイプです。Windowsでは、多くのアプリケーションは、システム内に配置され、比較的独立したダイナミックリンクライブラリ、DLLファイルに分割され、完全な実行可能ファイル、ではありません。我々は特定のプログラムを実行すると、対応するDLLファイルが呼び出されます。DLLファイルを複数使用することができるアプリケーションは、DLLファイルは、異なる用途に使用することができる、そのようなDLLファイルが共有DLLファイルと呼ばれます。

参照

「プログラマの自己修養」

おすすめ

転載: www.cnblogs.com/luoleqi/p/10932320.html