Linux Syscalls - GawinGowin/libasm GitHub Wiki

Linux システムコール番号一覧

システムコールとは

システムコールは、ユーザープログラムがカーネル(OS)の機能を利用するためのインターフェースです。 アセンブリでは syscall 命令を使用してシステムコールを呼び出します。

基本的な呼び出し方法

mov rax, システムコール番号
mov rdi, 第1引数
mov rsi, 第2引数
mov rdx, 第3引数
mov r10, 第4引数
mov r8,  第5引数
mov r9,  第6引数
syscall

よく使用されるシステムコール

ファイル操作

番号 名前 説明 第1引数(rdi) 第2引数(rsi) 第3引数(rdx)
0 sys_read ファイルから読み込み fd バッファ バイト数
1 sys_write ファイルに書き込み fd バッファ バイト数
2 sys_open ファイルを開く パス フラグ モード
3 sys_close ファイルを閉じる fd - -

プロセス管理

番号 名前 説明 第1引数(rdi) 第2引数(rsi) 第3引数(rdx)
57 sys_fork プロセスを複製 - - -
59 sys_execve プログラムを実行 パス argv envp
60 sys_exit プロセス終了 終了ステータス - -
61 sys_wait4 子プロセス待機 pid status options

メモリ管理

番号 名前 説明 第1引数(rdi) 第2引数(rsi) 第3引数(rdx)
9 sys_mmap メモリマッピング アドレス サイズ 保護
11 sys_munmap メモリマッピング解除 アドレス サイズ -
12 sys_brk ヒープ境界変更 アドレス - -

標準的なファイルディスクリプタ

名前 説明
0 stdin 標準入力
1 stdout 標準出力
2 stderr 標準エラー出力

実例

Hello World(write + exit)

section .data
    msg db 'Hello, World!', 0xA
    len equ $ - msg

section .text
    global _start

_start:
    ; write(1, msg, len)
    mov rax, 1      ; sys_write
    mov rdi, 1      ; stdout
    mov rsi, msg    ; メッセージ
    mov rdx, len    ; 長さ
    syscall

    ; exit(0)
    mov rax, 60     ; sys_exit
    mov rdi, 0      ; 正常終了
    syscall

ファイル読み込み例

    ; open("file.txt", O_RDONLY)
    mov rax, 2      ; sys_open
    mov rdi, filename
    mov rsi, 0      ; O_RDONLY
    mov rdx, 0      ; モード不要
    syscall
    mov r8, rax     ; fdを保存

    ; read(fd, buffer, 100)
    mov rax, 0      ; sys_read
    mov rdi, r8     ; fd
    mov rsi, buffer
    mov rdx, 100    ; 100バイト読み込み
    syscall

    ; close(fd)
    mov rax, 3      ; sys_close
    mov rdi, r8     ; fd
    syscall

戻り値について

  • システムコールの戻り値は rax レジスタに格納されます
  • 成功時:通常は処理したバイト数やファイルディスクリプタなど
  • エラー時:負の値(-errno)が返される

注意点

  1. 引数の順序: rdi, rsi, rdx, r10, r8, r9 の順番で渡す
  2. 呼び出し規約: System V AMD64 ABI に従う
  3. エラーハンドリング: 戻り値が負の場合はエラー
  4. レジスタ保護: システムコール後、一部レジスタの値が変更される可能性

参考資料

  • Linux カーネルソース: arch/x86/entry/syscalls/syscall_64.tbl
  • man ページ: man 2 syscall
  • System V AMD64 ABI 仕様書