系统调用接口
Related: 异常分类-Trap
1. 核心定义
系统调用 (System Call) 是用户态程序请求内核态服务(如读写文件、创建进程)的唯一合法入口。
- 它本质上是一种 陷阱 (Trap)。
- C 语言标准库(如
open,read,fork)其实是系统调用的 Wrapper Function(包装函数)。
2. 汇编实现 (x86-64)
在 AttackLab 中我们已经接触过,系统调用遵循特定的传参规则:
- 指令:
syscall - 调用号 (Syscall Number): 存放在
%rax中(例如59是execve,60是exit)。 - 参数传递:
- Arg 1:
%rdi - Arg 2:
%rsi - Arg 3:
%rdx - Arg 4:
%r10(注意:这里不是%rcx) - Arg 5:
%r8 - Arg 6:
%r9
- Arg 1:
- 返回值: 存放在
%rax中(负数通常表示错误,对应errno)。
3. 安全视角
- Pwn/Shellcode: 攻击者的最终目标通常是构造寄存器状态,执行
execve("/bin/sh", 0, 0)的系统调用。 - Tracing: 使用
strace ./program可以追踪程序执行的所有系统调用,这是逆向分析的利器。