現在の時刻を取得するAPIライブラリ関数を使用します
#include <stdio.h>
#include <time.h>
int main()
{
time_tt tt;
struct tm *t;//输出时变成可读的
tt = time(NULL);//time系统调用
t=localtime(&tt);
printf("time:%d:%d:%d:%d:%d:%d\n",t->tm_year+1900,t->tm_mon,t->tm_mdata,t->tm_hour,t->tm_min,t->tm_sec);
return 0;
}
システムコールの概要
- システムの重要性は、呼び出し:ユーザプロセスとハードウェアとの間の相互作用のためのオペレーティング・システムは、システムコールインターフェースのセットを提供します------
- プログラムは、基盤となるハードウェアからユーザーを解放します
- 大幅にシステムのセキュリティを向上させます
- これは、ユーザーが携帯性をプログラムすることができます
- アプリケーション・プログラミング・インターフェース(API)およびシステムコールソフト割り込みによってカーネルに明確な指示を送信するだけで別の関数定義されています
- libcライブラリは、APIリファレンスパッケージ・ルーチンの一部を定義します
システムコールの皮膚の三層
ユーザーモードプロセスは、システムコールを呼び出すと、カーネルモードのCPUの切り替えはカーネル関数で始まる
システムコール番号、システムコールの引数、関数呼び出し
カーネルモードとユーザーモードの割り込み処理
- ユーザーモードとカーネルモードを区別
- 現代のCPUは、一般的に命令実行の異なるレベルに焦点を当てています
- 高い実行レベル:命令のこのレベルは、特権命令を実行することができます
- Linuxの0レベルレベル3ユーザーモードカーネルモード
- 最下位2つのCSレジスタは、レベルコードを示します
- CSは、コード・セグメント・レジスタを選択した場合、EIPは、レジスタオフセットされています
- カーネルの状態のみのアクセスで0xc0000000より多くのスペース、あなたはアドレス空間0x00000000-0xbffffffffにアクセスすることができます
ユーザーモードでは、カーネルモードのメインフォームに処理を中断した場合。
システムコールは、特殊な割り込みです
コンテキスト登録
モードをカーネルにユーザーモードがユーザーモードから切り替えられた割り込みレジスタ/ int命令レジスタがスタック上のいくつかの値として保存されているのコンテキストを保存する必要があります。ユーザーの状態のスタックアドレスを、その後、サブの状態、ときCS:EIPの値
サイトの保護は、レジスタパケットを使用する割り込みルーチン保存の必要入力することで
回復保存割り込みルーチンを抜ける復旧サイトを
アセンブリコードに埋め込まれたC言語コード
- 「ASM」は、以下のインラインアセンブリコード、「ASM」は、「ASM」の別名であることを示しています。
- あなたはコンパイラのコードを最適化できないことを意味し、「揮発性」命令は、それが別名である「揮発性」、であるとして残さ続きます。
組み込みアセンブラ構文は次のとおりです。
ASM(
アセンブリ文テンプレート:
出力部品:
入力部:
破壊記述部)
テンプレートの簡単な編集: - :コードと、C言語「B =」を表します
int a=10,b;
asm("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /*输出部分*/
:"r"(a) /*输入部分*/
:"%eax" /*毁坏部分*/
);
Rは、任意のレジスタが内部、0%、1%、入出力部は、それらがマップされた変数が現れる順序に従って二つのレジスタ、10オペランドの一般のみ0%〜9%の合計の使用を表します。
1%0%を使用し、これらの数字はパーセント記号、ダブルで示されるオペランドレジスタがパーセントを行わなければならないという特別な意味を持っているので、二パーセントを登録します。
部の内部破壊%eaxにコンパイルされたコードブロックの実行中にEAXレジスタを表すが、決定に提出された実行、コンパイラ、前に保護するために、書き換えられます。