Linux系统调用表(System Call Table)

下表里的系统调用是根据 Linux 2.2的核心整理出来的。这些系统调用可以让你的程序很方便地与系统内核打交道。整理这个表的目的是为汇编程序设计提供方便,这样就可以调用系统核心提供的各种系统功能而不必使用C程序库了。 使用系统调用时,系统调用号放在$2里面,系统调用的前4个参数依次放入$4(a0)~$7(a3)中,多于4个的参数要通过堆栈来传递。

系统调用的具体描述可以在Linux下使用man来查询,也可以上网查询(比如用google查)。 呼叫系统调用是通过syscall指令来完成的。 系统调用后,它的返回值存放在$2中。

$2系统调用名源代码 $4$5$6$7通过堆栈
1sys_exitkernel/exit.c int----
2sys_forkarch/i386/kernel/process.c struct pt_regs----
3sys_readfs/read_write.c unsigned intchar *size_t--
4sys_writefs/read_write.c unsigned intconst char *size_t--
5sys_openfs/open.c const char *intint--
6sys_closefs/open.c unsigned int----
7sys_waitpidkernel/exit.c pid_tunsigned int *int--
8sys_creatfs/open.c const char *int---
9sys_linkfs/namei.c const char *const char *---
10sys_unlinkfs/namei.c const char *----
11sys_execvearch/i386/kernel/process.c struct pt_regs----
12sys_chdirfs/open.c const char *----
13sys_timekernel/time.c int *----
14sys_mknodfs/namei.c const char *intdev_t--
15sys_chmodfs/open.c const char *mode_t---
16sys_lchownfs/open.c const char *uid_tgid_t--
18sys_statfs/stat.c char *struct __old_kernel_stat *---
19sys_lseekfs/read_write.c unsigned intoff_tunsigned int--
20sys_getpidkernel/sched.c -----

我这个HTML只是很简单地描述了一些系统调用,详细的版本和说明可以参看

syscalls.html 不过这个表是x86的,我这个表就是根据它整理的。(把%eax %ebx %ecx %edx %esx 分别换成$2 $4 $5 $6 $7)