系统调用接口

Related: 异常分类-Trap

1. 核心定义

系统调用 (System Call) 是用户态程序请求内核态服务(如读写文件、创建进程)的唯一合法入口。

  • 它本质上是一种 陷阱 (Trap)
  • C 语言标准库(如 open, read, fork)其实是系统调用的 Wrapper Function(包装函数)

2. 汇编实现 (x86-64)

在 AttackLab 中我们已经接触过,系统调用遵循特定的传参规则:

  • 指令: syscall
  • 调用号 (Syscall Number): 存放在 %rax 中(例如 59execve60exit)。
  • 参数传递:
    • Arg 1: %rdi
    • Arg 2: %rsi
    • Arg 3: %rdx
    • Arg 4: %r10 (注意:这里不是 %rcx)
    • Arg 5: %r8
    • Arg 6: %r9
  • 返回值: 存放在 %rax 中(负数通常表示错误,对应 errno)。

3. 安全视角

  • Pwn/Shellcode: 攻击者的最终目标通常是构造寄存器状态,执行 execve("/bin/sh", 0, 0) 的系统调用。
  • Tracing: 使用 strace ./program 可以追踪程序执行的所有系统调用,这是逆向分析的利器。