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

第三章のメカニズムのシステムコール(上)

まず、ユーザーモード、カーネルモード、割り込み

  1. 4つのレベルのダウンロードIntel x86 CPUの実行より少ない数、より高い特権、0,1,2,3であるが、カーネルモードとユーザモードに対応し、わずか0.3のLinux特権レベル2を使用。
  2. カーネルモードとユーザーモードの違い:カーネルモード、CS:EIP値は、任意のアドレス0x00000000のかもしれ〜0xbfffffffは、ユーザーモードのアドレス空間にアクセスすることができます。
  3. 2つの方法でカーネルモードに:
    (1)ハードウェア割り込みかもしれ
    (2)は、カーネルモードに巻き込ま、システムのユーザーモード実行プロシージャ・コールを呼び出すことができ、トラップと呼ばれます。
  4. 値は、現在のCPUでカーネル・モード・レジスタに入れながら、ユーザスイッチはモードカーネルする場合(EIP値ときCS、ユーザモードスタックポインタ、ステータス・ワードを含む)、ユーザ・モード・レジスタ・コンテキストが保存され。

第二に、システムコール

  1. 意味:ユーザーモード処理のためのオペレーティング・システムおよびハードウェアインタフェースインタラクションのセットを提供します。
  2. 機能(特性):アウトプログラム基盤となるハードウェアからユーザーを保存し、大幅にシステムのセキュリティを向上させる、ユーザーは移植性をプログラムすることができます。
  3. API:アプリケーション・プログラミング・インタフェース、通常のカプセル化システムコールの内部での使用は、主な目的は、システムコールを発行することです。
  4. そしてAPIシステムとの間の関係は、呼び出し:1つ以上のシステムに対応するAPIは、API呼び出しの複数とすることができるシステムコールを呼び出します。パッケージシステムと相互作用しない内部カーネルAPIを呼び出す必要としません。

同じシステムコールを使用するには2つの方法で第三に、APIライブラリ関数を使用してCおよびアセンブリコード埋め込まれたコード

(SYS_RENAME付き()関数は、たとえば、ファイルの名前を変更します)

  1. ライブラリ関数は、システムコールAPIをトリガー使用

    C言語のコードを次のように:

    次のように図の実行結果は以下のとおりです。

  2. トリガーアセンブリ言語のシステムコール

    アセンブリコードは次のよう:

    次のように図の実行結果は以下のとおりです。

分析:

本体のコードは次のとおりです。

asm volatile("movl %2,%%ecx\n\t" //newname存入ecx 

      "movl %1,%%ebx\n\t" //oldname存入ebx 

      "movl $0x26,%%eax\n\t" //系统调用号存入eax 

      "int $0x80" //触发系统调用,陷入内核态

      :"=a"(ret) 

      :"b"(oldname),"c"(newname) );

ここで、EAXにシステムコール番号38(16進数で0x26である)、EBXにOLDNAMEうカーネルモードにアプリケーションを実行することにより、$ 0x80をint型システムコールを実行するために、ECXにnewname既存う、SYSTEM_CALL伝記を記載します実行結果の実装が確定申告でEAX、EAXに格納された後、対応するシステムのカーネル関数を見つけるための呼び出しリストのシステムコール番号は、格納されたパラメータに応じてカーネル関数SYS_RENAMEのEBXとECXと呼ば

IVの概要:

この章では、主にシステムを学んでいることは3層システムコール機構の動作メカニズムを呼び出します。ユーザーモードプロセスは、システムコールを呼び出したときに、カーネルモードとSYSTEM_CALLやシステムの実行を開始するためにCPUのスイッチは、カーネル関数を呼び出します。具体的には、カーネルは、割り込みサービスルーチンSYSTEM_CALLを対応する割り込みベクタ128の実行を開始へのシステムコールをトリガーするためのint $ 0x80またはを実行することで、この時間は数システムのAPI関数を呼び出すことによって関連付けるために、システムは、ここでは、カーネル関数を呼び出しますEAXレジスタ転送システムコール番号が必要です。

おすすめ

転載: www.cnblogs.com/liangxu111/p/11701615.html