システムコールと引数
linux-2.4.18 のソースからシステムコール番号とシステムコールの引数をまとめてみました。 レジスタに値をセットして、
li r0, 1 li r3, 0 sc
のようにして呼び出します。返り値も引数の型もいろいろありますが、結局32ビットの値かアドレスです。
sys# | type | NAME | arg1 (r3) | arg2 (r4) | arg3 (r5) | arg4 (r6) | arg5 (r7) | arg6 (r8) |
1 | long | sys_exit | int error_code | |||||
2 | int | sys_fork | struct pt_regs *regs | |||||
3 | ssize_t | sys_read | unsigned int fd | char * buf | size_t count | |||
4 | ssize_t | sys_write | unsigned int fd | const char * buf | size_t count | |||
5 | long | sys_open | const char * filename | int flags | int mode | |||
6 | long | sys_close | unsigned int fd | |||||
8 | long | sys_creat | const char * pathname | int mode | ||||
9 | long | sys_link | const char * oldname | const char * newname | ||||
10 | long | sys_unlink | const char * pathname | |||||
11 | int | sys_execve | char *filenamei | char **argv | char **envp | struct pt_regs *regs | ||
12 | long | sys_chdir | const char * filename | |||||
13 | long | sys_time | int * tloc | |||||
14 | long | sys_mknod | const char * filename | int mode | dev_t dev | |||
15 | long | sys_chmod | const char * filename | mode_t mode | ||||
16 | long | sys_lchown16 | const char * filename | old_uid_t user | old_gid_t group | |||
19 | off_t | sys_lseek | unsigned int fd | off_t offset | unsigned int origin | |||
20 | long | sys_getpid | void | |||||
21 | long | sys_mprotect | unsigned long start | size_t len | unsigned long prot | |||
22 | long | sys_oldumount | char * name | |||||
23 | long | sys_setuid16 | old_uid_t uid | |||||
24 | long | sys_getuid16 | void | |||||
25 | long | sys_stime | int * tptr | |||||
26 | int | sys_ptrace | long request | long pid | long addr | long data | ||
27 | unsigned long | sys_alarm | unsigned int seconds | |||||
29 | int | sys_pause | void | |||||
30 | long | sys_utime | char * filename | struct utimbuf * times | ||||
33 | long | sys_access | const char * filename | int mode | ||||
34 | long | sys_nice | int increment | |||||
36 | long | sys_sync | void | |||||
37 | long | sys_kill | int pid | int sig | ||||
38 | long | sys_rename | const char * oldname | const char * newname | ||||
39 | long | sys_mkdir | const char * pathname | int mode | ||||
40 | long | sys_rmdir | const char * pathname | |||||
41 | long | sys_dup | unsigned int fildes | |||||
42 | int | sys_pipe | unsigned long * fildes | |||||
43 | long | sys_times | struct tms * tbuf | |||||
45 | unsigned long | sys_brk | unsigned long brk | |||||
46 | long | sys_setgid16 | old_gid_t gid | |||||
47 | long | sys_getgid16 | void | |||||
49 | long | sys_geteuid16 | void | |||||
50 | long | sys_getegid16 | void | |||||
51 | long | sys_acct | const char *name | |||||
52 | long | sys_umount | char * name | int flags | ||||
54 | long | sys_ioctl | unsigned int fd | unsigned int cmd | unsigned long arg | |||
55 | long | sys_fcntl | unsigned int fd | unsigned int cmd | unsigned long arg | |||
57 | long | sys_setpgid | pid_t pid | pid_t pgid | ||||
60 | long | sys_umask | int mask | |||||
61 | long | sys_chroot | const char * filename | |||||
62 | long | sys_ustat | dev_t dev | struct ustat * ubuf | ||||
63 | long | sys_dup2 | unsigned int oldfd | unsigned int newfd | ||||
64 | long | sys_getppid | void | |||||
65 | long | sys_getpgrp | void | |||||
66 | long | sys_setsid | void | |||||
67 | long | sys_sgetmask | void | |||||
70 | long | sys_setreuid16 | old_uid_t ruid | old_uid_t euid | ||||
71 | long | sys_setregid16 | old_gid_t rgid | old_gid_t egid | ||||
72 | int | sys_sigsuspend | int restart | unsigned long oldmask | old_sigset_t mask | struct pt_regs *regs | ||
73 | long | sys_sigpending | old_sigset_t *set | |||||
74 | long | sys_sethostname | char *name | int len | ||||
75 | long | sys_setrlimit | unsigned int resource | struct rlimit *rlim | ||||
76 | long | sys_old_getrlimit | unsigned int resource | struct rlimit *rlim | ||||
77 | long | sys_getrusage | int who | struct rusage *ru | ||||
78 | long | sys_gettimeofday | struct timeval *tv | struct timezone *tz | ||||
79 | long | sys_settimeofday | struct timeval *tv | struct timezone *tz | ||||
80 | long | sys_getgroups16 | int gidsetsize | old_gid_t *grouplist | ||||
81 | long | sys_setgroups16 | int gidsetsize | old_gid_t *grouplist | ||||
82 | int | old_select | struct sel_arg_struct *arg | |||||
83 | long | sys_symlink | const char * oldname | const char * newname | ||||
85 | long | sys_readlink | const char * path | char * buf | int bufsiz | |||
86 | long | sys_uselib | const char * library | |||||
87 | long | sys_swapon | const char * specialfile | int swap_flags | ||||
88 | long | sys_reboot | int magic1 | int magic2 | unsigned int cmd | void * arg | ||
89 | int | old_readdir | unsigned int fd | void * dirent | unsigned int count | |||
90 | int | old_mmap | struct mmap_arg_struct *arg | |||||
91 | long | sys_munmap | unsigned long addr | size_t len | ||||
92 | long | sys_truncate | const char * path | unsigned long length | ||||
93 | long | sys_ftruncate | unsigned int fd | unsigned long length | ||||
94 | long | sys_fchmod | unsigned int fd | mode_t mode | ||||
95 | long | sys_fchown16 | unsigned int fd | old_uid_t user | old_gid_t group | |||
96 | long | sys_getpriority | int which | int who | ||||
97 | long | sys_setpriority | int which | int who | int niceval | |||
99 | long | sys_statfs | const char * path | struct statfs * buf | ||||
100 | long | sys_fstatfs | unsigned int fd | struct statfs * buf | ||||
102 | long | sys_socketcall | int call | unsigned long *args | ||||
103 | long | sys_syslog | int type | char * buf | int len | |||
104 | long | sys_setitimer | int which | struct itimerval *value | struct itimerval *ovalue | |||
105 | long | sys_getitimer | int which | struct itimerval *value | ||||
106 | long | sys_newstat | char * filename | struct stat * statbuf | ||||
107 | long | sys_newlstat | char * filename | struct stat * statbuf | ||||
108 | long | sys_newfstat | unsigned int fd | struct stat * statbuf | ||||
111 | int | sys_vfork | struct pt_regs *regs | |||||
114 | long | sys_wait4 | pid_t pid | unsigned int * stat_addr | int options | struct rusage * ru | ||
115 | long | sys_swapoff | const char * specialfile | |||||
116 | long | sys_sysinfo | struct sysinfo *info | |||||
117 | int | sys_ipc | uint call | int first | int second | int third | void *ptr | long fifth |
118 | long | sys_fsync | unsigned int fd | |||||
119 | int | sys_sigreturn | struct pt_regs *regs | |||||
120 | int | sys_clone | unsigned long clone_flags | unsigned long newsp | struct pt_regs *regs | |||
121 | long | sys_setdomainname | char *name | int len | ||||
122 | long | sys_newuname | struct new_utsname * name | |||||
124 | long | sys_adjtimex | struct timex *txc_p | |||||
125 | unsigned long | sys_mremap | unsigned long addr | unsigned long old_len | unsigned long new_len | unsigned long flags | unsigned long new_addr | |
126 | long | sys_sigprocmask | int how | old_sigset_t *set | old_sigset_t *oset | |||
127 | unsigned long | sys_create_module | const char *name_user | size_t size | ||||
128 | long | sys_init_module | const char *name_user | struct module *mod_user | ||||
129 | long | sys_delete_module | const char *name_user | |||||
130 | long | sys_get_kernel_syms | struct kernel_sym *table | |||||
131 | long | sys_quotactl | int cmd | const char *special | int id | caddr_t addr | ||
132 | long | sys_getpgid | pid_t pid | |||||
133 | long | sys_fchdir | unsigned int fd | |||||
134 | long | sys_bdflush | int func | long data | ||||
135 | long | sys_sysfs | int option | unsigned long arg1 | unsigned long arg2 | |||
136 | long | sys_personality | u_long personality | |||||
138 | long | sys_setfsuid16 | old_uid_t uid | |||||
139 | long | sys_setfsgid16 | old_gid_t gid | |||||
140 | long | sys_llseek | unsigned int fd | unsigned long offset_high | unsigned long offset_low | loff_t * result | unsigned int origin | |
141 | long | sys_getdents | unsigned int fd | void * dirent | unsigned int count | |||
142 | long | sys_select | int n | fd_set *inp | fd_set *outp | fd_set *exp | struct timeval *tvp | |
143 | long | sys_flock | unsigned int fd | unsigned int cmd | ||||
144 | long | sys_msync | unsigned long start | size_t len | int flags | |||
145 | ssize_t | sys_readv | unsigned long fd | const struct iovec * vector | unsigned long count | |||
146 | ssize_t | sys_writev | unsigned long fd | const struct iovec * vector | unsigned long count | |||
147 | long | sys_getsid | pid_t pid | |||||
148 | long | sys_fdatasync | unsigned int fd | |||||
150 | long | sys_mlock | unsigned long start | size_t len | ||||
151 | long | sys_munlock | unsigned long start | size_t len | ||||
152 | long | sys_mlockall | int flags | |||||
153 | long | sys_munlockall | void | |||||
154 | long | sys_sched_setparam | pid_t pid | struct sched_param *param | ||||
155 | long | sys_sched_getparam | pid_t pid | struct sched_param *param | ||||
156 | long | sys_sched_setscheduler | pid_t pid | int policy | struct sched_param *param | |||
157 | long | sys_sched_getscheduler | pid_t pid | |||||
158 | long | sys_sched_yield | void | |||||
159 | long | sys_sched_get_priority_max | int policy | |||||
160 | long | sys_sched_get_priority_min | int policy | |||||
161 | long | sys_sched_rr_get_interval | pid_t pid | struct timespec *interval | ||||
162 | long | sys_nanosleep | struct timespec *rqtp | struct timespec *rmtp | ||||
163 | unsigned long | sys_arm_mremap | unsigned long addr | unsigned long old_len | unsigned long new_len | unsigned long flags | ||
164 | long | sys_setresuid16 | old_uid_t ruid | old_uid_t euid | old_uid_t suid | |||
165 | long | sys_getresuid16 | old_uid_t *ruid | old_uid_t *euid | old_uid_t *suid | |||
167 | long | sys_query_module | const char *name_user | int which | char *buf | size_t bufsize | size_t *ret | |
168 | long | sys_poll | struct pollfd * ufds | unsigned int nfds | long timeout | |||
169 | int | sys_nfsservctl | int cmd | void *argp | void *resp | |||
170 | long | sys_setresgid16 | old_gid_t rgid | old_gid_t egid | old_gid_t sgid | |||
171 | long | sys_getresgid16 | old_gid_t *rgid | old_gid_t *egid | old_gid_t *sgid | |||
172 | long | sys_prctl | int option | unsigned long arg2 | unsigned long arg3 | unsigned long arg4 | unsigned long arg5 | |
173 | int | sys_rt_sigreturn | struct pt_regs *regs | |||||
174 | long | sys_rt_sigaction | int sig | const struct sigaction *act | struct sigaction *oact | size_t sigsetsize | ||
175 | long | sys_rt_sigprocmask | int how | sigset_t *set | sigset_t *oset | size_t sigsetsize | ||
176 | long | sys_rt_sigpending | sigset_t *set | size_t sigsetsize | ||||
177 | long | sys_rt_sigtimedwait | const sigset_t *uthese | siginfo_t *uinfo | const struct timespec *uts | size_t sigsetsize | ||
178 | long | sys_rt_sigqueueinfo | int pid | int sig | siginfo_t *uinfo | |||
179 | int | sys_rt_sigsuspend | sigset_t *unewset | size_t sigsetsize | struct pt_regs *regs | |||
180 | ssize_t | sys_pread | unsigned int fd | char * buf | size_t count | loff_t pos | ||
181 | ssize_t | sys_pwrite | unsigned int fd | const char * buf | size_t count | loff_t pos | ||
182 | long | sys_chown16 | const char * filename | old_uid_t user | old_gid_t group | |||
183 | long | sys_getcwd | char *buf | unsigned long size | ||||
184 | long | sys_capget | cap_user_header_t header | cap_user_data_t dataptr | ||||
185 | long | sys_capset | cap_user_header_t header | const cap_user_data_t data | ||||
186 | int | sys_sigaction | int sig | const struct old_sigaction *act | struct old_sigaction *oact | |||
187 | ssize_t | sys_sendfile | int out_fd | int in_fd | off_t *offset | size_t count | ||
190 | long | sys_utimes | char * filename | struct timeval * utimes | ||||
191 | long | sys_getrlimit | unsigned int resource | struct rlimit *rlim | ||||
192 | long | sys_mmap2 | unsigned long addr | unsigned long len | unsigned long prot | unsigned long flags | unsigned long fd | unsigned long pgoff |
193 | long | sys_truncate64 | const char * path | loff_t length | ||||
194 | long | sys_ftruncate64 | unsigned int fd | loff_t length | ||||
195 | long | sys_stat64 | char * filename | struct stat64 * statbuf | long flags | |||
196 | long | sys_lstat64 | char * filename | struct stat64 * statbuf | long flags | |||
197 | long | sys_fstat64 | unsigned long fd | struct stat64 * statbuf | long flags | |||
198 | long | sys_lchown | const char * filename | uid_t user | gid_t group | |||
199 | long | sys_getuid | void | |||||
200 | long | sys_getgid | void | |||||
201 | long | sys_geteuid | void | |||||
202 | long | sys_getegid | void | |||||
203 | long | sys_setreuid | uid_t ruid | uid_t euid | ||||
204 | long | sys_setregid | gid_t rgid | gid_t egid | ||||
205 | long | sys_getgroups | int gidsetsize | gid_t *grouplist | ||||
206 | long | sys_setgroups | int gidsetsize | gid_t *grouplist | ||||
207 | long | sys_fchown | unsigned int fd | uid_t user | gid_t group | |||
208 | long | sys_setresuid | uid_t ruid | uid_t euid | uid_t suid | |||
209 | long | sys_getresuid | uid_t *ruid | uid_t *euid | uid_t *suid | |||
210 | long | sys_setresgid | gid_t rgid | gid_t egid | gid_t sgid | |||
211 | long | sys_getresgid | gid_t *rgid | gid_t *egid | gid_t *sgid | |||
212 | long | sys_chown | const char * filename | uid_t user | gid_t group | |||
213 | long | sys_setuid | uid_t uid | |||||
214 | long | sys_setgid | gid_t gid | |||||
215 | long | sys_setfsuid | uid_t uid | |||||
216 | long | sys_setfsgid | gid_t gid | |||||
217 | long | sys_getdents64 | unsigned int fd | void * dirent | unsigned int count | |||
218 | long | sys_pivot_root | const char *new_root | const char *put_old | ||||
219 | long | sys_mincore | unsigned long start | size_t len | unsigned char * vec | |||
220 | long | sys_madvise | unsigned long start | size_t len | int behavior | |||
221 | long | sys_fcntl64 | unsigned int fd | unsigned int cmd | unsigned long arg | |||
224 | long | sys_gettid | void | |||||
225 | ssize_t | sys_readahead | int fd | loff_t offset | size_t count |
ネットワーク関連のシステムコールは sys_socketcall (102) の第1引数に以下の表の先頭列に示す番号 (10進) を設定して呼び出します。 引数はメモリに格納して先頭アドレスを sys_socketcall の第2引数に設定します。
1 | long | sys_socket | int family | int type | int protocol | |||
2 | long | sys_bind | int fd | struct sockaddr *umyaddr | int addrlen | |||
3 | long | sys_connect | int fd | struct sockaddr *uservaddr | int addrlen | |||
4 | long | sys_listen | int fd | int backlog | ||||
5 | long | sys_accept | int fd | struct sockaddr *upeer_sockaddr | int *upeer_addrlen | |||
6 | long | sys_getsockname | int fd | struct sockaddr *usockaddr | int *usockaddr_len | |||
7 | long | sys_getpeername | int fd | struct sockaddr *usockaddr | int *usockaddr_len | |||
8 | long | sys_socketpair | int family | int type | int protocol | int usockvec[2] | ||
9 | long | sys_send | int fd | void * buff | size_t len | unsigned flags | ||
10 | long | sys_recv | int fd | void * ubuf | size_t size | unsigned flags | ||
11 | long | sys_sendto | int fd | void * buff | size_t len | unsigned flags | struct sockaddr *addr | int addr_len |
12 | long | sys_recvfrom | int fd | void * ubuf | size_t size | unsigned flags | struct sockaddr *addr | int *addr_len |
13 | long | sys_shutdown | int fd | int how | ||||
14 | long | sys_setsockopt | int fd | int level | int optname | char *optval | int optlen | |
15 | long | sys_getsockopt | int fd | int level | int optname | char *optval | int *optlen | |
16 | long | sys_sendmsg | int fd | struct msghdr *msg | unsigned flags | |||
17 | long | sys_recvmsg | int fd | struct msghdr *msg | unsigned int flags |