Skip to content

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 となる。
  • C 言語プログラム中に syscall 命令を埋め込む場合,C 言語的には syscall 命令の実行は関数呼び出しではないため,命令の前後で各種レジスタ値が保存されていることが必要。
Clone this wiki locally