[コンポーネント言語]システムコール


System call


システムコールに関連するヘッダ.
cd /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/sys

システムコール


システム呼び出しとは、オペレーティングシステムカーネルに特定のタスクを実行するようにプログラムが要求することです.次のタイプがあります.
  • プロセス制御
  • ファイルアクション(ファイルアクション)
  • 設備管理
  • 情報保守
  • 通信
  • システムコール番号


  • システム呼び出しを呼び出すには、システム呼び出しの番号を知る必要があります.

  • 次のパスのsyscall.hで見つけられる
  • vim /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/sys/syscall.h

    システム呼び出し番号の取得


  • MacOSまたはBSDは、システムコールを複数のレベルに分けます.

  • システムコール番号の1番目(uper order bit)は、このシステムコールクラスを区別する番号です.
  • write、read、exitなどの関数は、SYSCALL_CLASS_UNIXクラスに含まれるシステム呼び出しであり、これらのクラスの番号は
  • である.
    #define SYSCALL_CLASS_NONE	0	/* Invalid */
    #define SYSCALL_CLASS_MACH	1	/* Mach */	
    #define SYSCALL_CLASS_UNIX	2	/* Unix/BSD */
    #define SYSCALL_CLASS_MDEP	3	/* Machine-dependent */
    #define SYSCALL_CLASS_DIAG	4	/* Diagnostics */
    syscall_sw.h

    コール番号の例


  • すべてのUnixシステムコールは0x200000 + unix syscall #

  • write号は4番なので0x2000004
  • system call number

    register

  • システム呼び出しのパラメータ(パラメータ)は、演算のためにレジスタとして表される
  • システム呼び出し中に使用するレジスタは6種類あり、残りはスタックに格納される:rdi、rsi、rdx、rcx、r 8 d、r 9 d
  • .
  • システムコール番号ダイヤルバック値はraxに含まれる
  • である.
    x86 64 register

    システム呼び出しパラメータ


  • システム呼び出しで使用される6つのレジスタは、以下の順序でシステム呼び出しのパラメータとして使用される.
    rdi
    rsi
    rdx
    rcx
    r8
    r9
    system call tutorial

  • したがって、rdiにはfdが含まれ、rsiには*bufが含まれ、rdxにはcountが含まれているという関数の宣言が見られる.
    ssize_t read(int fd, void *buf, size_t count);
  • 3 3つのパラメータ以外の値を含める必要がある場合は、rdi、rsi、rdxではなく、他のレジスタまたはスタックを使用します.

  • 次のドキュメントでは、各システム呼び出しにどのレジスタをパラメータとして使用するかをまとめます.
    system call parameters