下表里的系统调用是根据 Linux 2.2的核心整理出来的。这些系统调用可以让你的程序很方便地与系统内核打交道。整理这个表的目的是为汇编程序设计提供方便,这样就可以调用系统核心提供的各种系统功能而不必使用C程序库了。 使用系统调用时,系统调用号放在$2里面,系统调用的前4个参数依次放入$4(a0)~$7(a3)中,多于4个的参数要通过堆栈来传递。
系统调用的具体描述可以在Linux下使用man来查询,也可以上网查询(比如用google查)。 呼叫系统调用是通过syscall指令来完成的。 系统调用后,它的返回值存放在$2中。
$2 | 系统调用名 | 源代码 | $4 | $5 | $6 | $7 | 通过堆栈 |
---|---|---|---|---|---|---|---|
1 | sys_exit | kernel/exit.c | int | - | - | - | - |
2 | sys_fork | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - |
3 | sys_read | fs/read_write.c | unsigned int | char * | size_t | - | - |
4 | sys_write | fs/read_write.c | unsigned int | const char * | size_t | - | - |
5 | sys_open | fs/open.c | const char * | int | int | - | - |
6 | sys_close | fs/open.c | unsigned int | - | - | - | - |
7 | sys_waitpid | kernel/exit.c | pid_t | unsigned int * | int | - | - |
8 | sys_creat | fs/open.c | const char * | int | - | - | - |
9 | sys_link | fs/namei.c | const char * | const char * | - | - | - |
10 | sys_unlink | fs/namei.c | const char * | - | - | - | - |
11 | sys_execve | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - |
12 | sys_chdir | fs/open.c | const char * | - | - | - | - |
13 | sys_time | kernel/time.c | int * | - | - | - | - |
14 | sys_mknod | fs/namei.c | const char * | int | dev_t | - | - |
15 | sys_chmod | fs/open.c | const char * | mode_t | - | - | - |
16 | sys_lchown | fs/open.c | const char * | uid_t | gid_t | - | - |
18 | sys_stat | fs/stat.c | char * | struct __old_kernel_stat * | - | - | - |
19 | sys_lseek | fs/read_write.c | unsigned int | off_t | unsigned int | - | - |
20 | sys_getpid | kernel/sched.c | - | - | - | - | - |
我这个HTML只是很简单地描述了一些系统调用,详细的版本和说明可以参看
syscalls.html 不过这个表是x86的,我这个表就是根据它整理的。(把%eax %ebx %ecx %edx %esx 分别换成$2 $4 $5 $6 $7)