-
Couldn't load subscription status.
- Fork 5
Syscall Instruction
Kota UCHIDA edited this page Dec 4, 2019
·
1 revision
Syscall/Sysret は x86-64 の 64 ビットモードでシステムコールを高速に行うための命令。
- IA32_EFER.SCE (Syscall Enable Bit) = 1 にする必要がある
- IA32_EFER の構造は Intel SDM Vol.3 Table 5-4. Extended Feature Enable MSR (IA32_EFER)
- IA32_STAR の 63:48 および 47:32 に適切なセグメントセレクタ番号を書いておく必要がある
- sysret で 64 ビットモードを維持したまま return するには,オペランドサイズプレフィクスを付けねばならない
- NASM なら
o64 sysretと書き,GNU ASM ならsysretqとなる。
- NASM なら
- C 言語プログラム中に syscall 命令を埋め込む場合,C 言語的には syscall 命令の実行は関数呼び出しではないため,命令の前後で各種レジスタ値が保存されていることが必要。