sysenter
読み:シス-エンター
外語:sysenter
x86系プロセッサーの命令の一つで、システムコール用に用意された命令。
概要
Pentium II以降で利用できる。オペコードは「0fh 34h」の2バイトである。
元の処理に戻る場合の命令はsysexitで、こちらのオペコードは「0fh 035h」の2バイトである。
特徴
由来
従来、システムコールの実装にはソフトウェア割り込み機能が使われていた(Windows NT系ならint 2eh、Linuxならint 80h)が、ソフトウェア割り込みは処理が煩雑であるため遅かった。
そこで、高速なシステムコールを実現するために、この命令が追加された。
挙動
sysenter命令は、次のような動作をする。
- CSレジスターに、SYSENTER_CS_MSR(MSR 174H)の値をロード
- EIPレジスターに、SYSENTER_EIP_MSR(MSR 176H)の値をロード
- SSレジスターに、SYSENTER_CS_MSRの値に8を加算した値をロード
- ESPレジスターに、SYSENTER_ESP_MSR(MSR 175H)の値をロード
- 特権レベル0(RING 0)に切り替え、カーネルモードルーチンの実行を開始
呼び出し元をスタックに積むこともなく、MSRの内容をレジスターにロードしてカーネルモードに入るだけの動作をしている。
メモリーアクセスが無いため非常に高速ということになるが、呼び出し元をスタック上に記録していないため、デバッガーを使う場合、この命令に対応していなければ呼び出し元が分からない。
再検索