第三章のメカニズムのシステムコール(上)
まず、ユーザーモード、カーネルモード、割り込み
- 4つのレベルのダウンロードIntel x86 CPUの実行より少ない数、より高い特権、0,1,2,3であるが、カーネルモードとユーザモードに対応し、わずか0.3のLinux特権レベル2を使用。
- カーネルモードとユーザーモードの違い:カーネルモード、CS:EIP値は、任意のアドレス0x00000000のかもしれ〜0xbfffffffは、ユーザーモードのアドレス空間にアクセスすることができます。
- 2つの方法でカーネルモードに:
(1)ハードウェア割り込みかもしれ
(2)は、カーネルモードに巻き込ま、システムのユーザーモード実行プロシージャ・コールを呼び出すことができ、トラップと呼ばれます。 - 値は、現在のCPUでカーネル・モード・レジスタに入れながら、ユーザスイッチはモードカーネルする場合(EIP値ときCS、ユーザモードスタックポインタ、ステータス・ワードを含む)、ユーザ・モード・レジスタ・コンテキストが保存され。
第二に、システムコール
- 意味:ユーザーモード処理のためのオペレーティング・システムおよびハードウェアインタフェースインタラクションのセットを提供します。
- 機能(特性):アウトプログラム基盤となるハードウェアからユーザーを保存し、大幅にシステムのセキュリティを向上させる、ユーザーは移植性をプログラムすることができます。
- API:アプリケーション・プログラミング・インタフェース、通常のカプセル化システムコールの内部での使用は、主な目的は、システムコールを発行することです。
- そしてAPIシステムとの間の関係は、呼び出し:1つ以上のシステムに対応するAPIは、API呼び出しの複数とすることができるシステムコールを呼び出します。パッケージシステムと相互作用しない内部カーネルAPIを呼び出す必要としません。
同じシステムコールを使用するには2つの方法で第三に、APIライブラリ関数を使用してCおよびアセンブリコード埋め込まれたコード
(SYS_RENAME付き()関数は、たとえば、ファイルの名前を変更します)
ライブラリ関数は、システムコールAPIをトリガー使用
C言語のコードを次のように:
次のように図の実行結果は以下のとおりです。
トリガーアセンブリ言語のシステムコール
アセンブリコードは次のよう:
次のように図の実行結果は以下のとおりです。
分析:
本体のコードは次のとおりです。
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レジスタ転送システムコール番号が必要です。