Syscallx 64
Syscallx 64
CHAPMAN
Note: 64-bit x86 uses syscall instead of interrupt 0x80. The result value will be in %rax
To find the implementation of a system call, grep the kernel tree for SYSCALL_DEFINE.\?
(syscall,
The results show that the implementation is in fs/read_write.c and that it takes 3 arguments
(thus SYSCALL_DEFINE3).
Linux Cross Reference is another good tool for finding information about system calls.
By the way, the system call numbers are different for 32-bit x86. A system call table for i386 (32-
bit) can be found at http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
Information on the order of registers can be found on page 124 of the x86_64 ABI paper at
http://www.x86-64.org/documentation/abi.pdf
const char
2 sys_open int flags int mode
*filename
struct stat
5 sys_fstat unsigned int fd
*statbuf
unsigned int
8 sys_lseek unsigned int fd off_t offset
origin
unsigned long
11 sys_munmap size_t len
addr
size_t
14 sys_rt_sigprocmask int how sigset_t *nset sigset_t *oset
sigsetsize
unsigned long
15 sys_rt_sigreturn
__unused
18 sys_pwrite64 unsigned int fd const char *buf size_t count loff_t pos
const char
21 sys_access int mode
*filename
24 sys_sched_yield
unsigned long
26 sys_msync size_t len int flags
start
unsigned long
28 sys_madvise size_t len_in int behavior
start
struct shmid_ds
31 sys_shmctl int shmid int cmd
*buf
34 sys_pause
struct itimerval
36 sys_getitimer int which
*value
unsigned int
37 sys_alarm
seconds
39 sys_getpid
struct sockaddr
42 sys_connect int fd int addrlen
*uservaddr
unsigned
44 sys_sendto int fd void *buff size_t len
flags
unsigned
45 sys_recvfrom int fd void *ubuf size_t size
flags
struct msghdr
46 sys_sendmsg int fd unsigned flags
*msg
struct msghdr
47 sys_recvmsg int fd unsigned int flags
*msg
struct sokaddr
49 sys_bind int fd int addrlen
*umyaddr
int
53 sys_socketpair int family int type int protocol
*usockvec
57 sys_fork
58 sys_vfork
struct
61 sys_wait4 pid_t upid int *stat_addr int options
rusage *ru
struct
63 sys_uname old_utsname
*name
struct sembuf
65 sys_semop int semid unsigned nsops
*tsops
union
66 sys_semctl int semid int semnum int cmd
semun arg
struct msgbuf
69 sys_msgsnd int msqid size_t msgsz int msgflg
*msgp
struct msgbuf
70 sys_msgrcv int msqid size_t msgsz long msgtyp
*msgp
struct msqid_ds
71 sys_msgctl int msqid int cmd
*buf
unsigned long
77 sys_ftruncate unsigned int fd
length
const char
80 sys_chdir
*filename
const char
83 sys_mkdir int mode
*pathname
const char
84 sys_rmdir
*pathname
const char
85 sys_creat int mode
*pathname
const char
90 sys_chmod mode_t mode
*filename
const char
92 sys_chown uid_t user gid_t group
*filename
const char
94 sys_lchown uid_t user gid_t group
*filename
struct timezone
96 sys_gettimeofday struct timeval *tv
*tz
unsigned int
97 sys_getrlimit struct rlimit *rlim
resource
struct sysinfo
99 sys_sysinfo
*info
struct sysinfo
100 sys_times
*info
102 sys_getuid
104 sys_getgid
107 sys_geteuid
108 sys_getegid
110 sys_getppid
111 sys_getpgrp
112 sys_setsid
cap_user_header_t cap_user_data_t
125 sys_capget
header dataptr
const
cap_user_header_t
126 sys_capset cap_user_data_t
header
data
struct utimbuf
132 sys_utime char *filename
*times
const char
133 sys_mknod umode_t mode unsigned dev
*filename
NOT
134 sys_uselib
IMPLEMENTED
unsigned int
135 sys_personality
personality
const char
137 sys_statfs struct statfs *buf
*pathname
struct
142 sys_sched_setparam pid_t pid sched_param
*param
struct
143 sys_sched_getparam pid_t pid sched_param
*param
struct timespec
148 sys_sched_rr_get_interval pid_t pid
*interval
unsigned long
149 sys_mlock size_t len
start
unsigned long
150 sys_munlock size_t len
start
152 sys_munlockall
153 sys_vhangup
unsigned long
154 sys_modify_ldt int func void *ptr
bytecount
struct
156 sys__sysctl
__sysctl_args *args
struct timex
159 sys_adjtimex
*txc_p
unsigned int
160 sys_setrlimit struct rlimit *rlim
resource
const char
161 sys_chroot
*filename
162 sys_sync
struct timezone
164 sys_settimeofday struct timeval *tv
*tz
unsigned
165 sys_mount char *dev_name char *dir_name char *type
long flags
const char
167 sys_swapon int swap_flags
*specialfile
const char
168 sys_swapoff
*specialfile
169 sys_reboot int magic1 int magic2 unsigned int cmd void *arg
struct pt_regs
172 sys_iopl unsigned int level
*regs
REMOVED IN
174 sys_create_module
Linux 2.6
175 sys_init_module void *umod unsigned long len const char *uargs
const chat
176 sys_delete_module unsigned int flags
*name_user
REMOVED IN
177 sys_get_kernel_syms
Linux 2.6
REMOVED IN
178 sys_query_module
Linux 2.6
const char
179 sys_quotactl unsigned int cmd qid_t id void *addr
*special
NOT
180 sys_nfsservctl
IMPLEMENTED
NOT
181 sys_getpmsg
IMPLEMENTED
NOT
182 sys_putpmsg
IMPLEMENTED
NOT
183 sys_afs_syscall
IMPLEMENTED
NOT
184 sys_tuxcall
IMPLEMENTED
NOT
185 sys_security
IMPLEMENTED
186 sys_gettid
const char
188 sys_setxattr const char *name const void *value size_t size
*pathname
const char
189 sys_lsetxattr const char *name const void *value size_t size
*pathname
190 sys_fsetxattr int fd const char *name const void *value size_t size
const char
191 sys_getxattr const char *name void *value size_t size
*pathname
const char
192 sys_lgetxattr const char *name void *value size_t size
*pathname
193 sys_fgetxattr int fd const har *name void *value size_t size
const char
194 sys_listxattr char *list size_t size
*pathname
const char
195 sys_llistxattr char *list size_t size
*pathname
196 sys_flistxattr int fd char *list size_t size
const char
197 sys_removexattr const char *name
*pathname
const char
198 sys_lremovexattr const char *name
*pathname
struct
202 sys_futex u32 *uaddr int op u32 val timespec
*utime
unsigned long
203 sys_sched_setaffinity pid_t pid unsigned int len
*user_mask_ptr
unsigned long
204 sys_sched_getaffinity pid_t pid unsigned int len
*user_mask_ptr
NOT
205 sys_set_thread_area IMPLEMENTED.
Use arch_prctl
unsigned aio_context_t
206 sys_io_setup
nr_events *ctxp
struct
aio_context_t
208 sys_io_getevents long min_nr long nr io_event
ctx_id
*events
NOT
211 sys_get_thread_area IMPLEMENTED.
Use arch_prctl
NOT
214 sys_epoll_ctl_old
IMPLEMENTED
NOT
215 sys_epoll_wait_old
IMPLEMENTED
struct
unsigned int
217 sys_getdents64 unsigned int fd linux_dirent64
count
*dirent
219 sys_restart_syscall
struct itimerspec
224 sys_timer_gettime timer_t timer_id
*setting
struct
const clockid_t const struct
230 sys_clock_nanosleep int flags timespec
which_clock timespec *rqtp
*rmtp
struct epoll_event
232 sys_epoll_wait int epfd int maxevents int timeout
*events
struct
233 sys_epoll_ctl int epfd int op int fd epoll_event
*event
struct timeval
235 sys_utimes char *filename
*utimes
NOT
236 sys_vserver
IMPLEMENTED
struct
const char
240 sys_mq_open int oflag mode_t mode mq_attr
*u_name
*u_attr
const char
241 sys_mq_unlink
*u_name
const struct
244 sys_mq_notify mqd_t mqdes sigevent
*u_notification
const struct
struct mq_attr
245 sys_mq_getsetattr mqd_t mqdes mq_attr
*u_omqstat
*u_mqstat
struct
unsigned long unsigned long unsigned
246 sys_kexec_load kexec_segment
entry nr_segments long flags
*segments
struct siginfo
247 sys_waitid int which pid_t upid int options
*infop
253 sys_inotify_init
const char
254 sys_inotify_add_watch int fd u32 mask
*pathname
const
unsigned long const unsigned unsigned
256 sys_migrate_pages pid_t pid
maxnode long *old_nodes long
*new_nodes
const char
257 sys_openat int dfd int flags int mode
*filename
const char
258 sys_mkdirat int dfd int mode
*pathname
const char
260 sys_fchownat int dfd uid_t user gid_t group
*filename
const char
263 sys_unlinkat int dfd int flag
*pathname
const char
267 sys_readlinkat int dfd char *buf int bufsiz
*pathname
const char
268 sys_fchmodat int dfd mode_t mode
*filename
const char
269 sys_faccessat int dfd int mode
*filename
const
struct timespec
271 sys_ppoll struct pollfd *ufds unsigned int nfds sigset_t
*tsp
*sigmask
unsigned long
272 sys_unshare
unshare_flags
struct
273 sys_set_robust_list robust_list_head size_t len
*head
struct
274 sys_get_robust_list int pid robust_list_head size_t *len_ptr
**head_ptr
loff_t
275 sys_splice int fd_in loff_t *off_in int fd_out
*off_out
unsigned int
276 sys_tee int fdin int fdout size_t len
flags
struct epoll_event
281 sys_epoll_pwait int epfd int maxevents int timeout
*events
sigset_t
282 sys_signalfd int ufd size_t sizemask
*user_mask
struct
const struct
286 sys_timerfd_settime int ufd int flags itimerspec
itimerspec *utmr
*otmr
struct itimerspec
287 sys_timerfd_gettime int ufd
*otmr
288 sys_accept4 int fd struct sockaddr int int flags
*upeer_sockaddr *upeer_addrlen
sigset_t
289 sys_signalfd4 int ufd size_t sizemask int flags
*user_mask
unsigned int
292 sys_dup3 unsigned int oldfd int flags
newfd
siginfo_t
297 sys_rt_tgsigqueueinfo pid_t tgid pid_t pid int sig
*uinfo
struct
298 sys_perf_event_open perf_event_attr pid_t pid int cpu int group_fd
*attr_uptr
unsigned int
300 sys_fanotify_init unsigned int flags
event_f_flags
301 sys_fanotify_mark long fanotify_fd long flags __u64 mask long dfd
struct file_handle
303 sys_name_to_handle_at int dfd const char *name int *mnt_id
*handle
struct file_handle
304 sys_open_by_handle_at int dfd const char *name int *mnt_id
*handle
clockid_t
305 sys_clock_adjtime struct timex *tx
which_clock
struct
309 sys_getcpu unsigned *cpup unsigned *nodep getcpu_cache
*unused
struct sched_attr
314 sys_sched_setattr pid_t pid unsigned int flags
__user *attr
const char
const char __user
316 sys_renameat2 int olddfd int newdfd __user
*oldname
*newname
318 sys_getrandom char __user *buf size_t count unsigned int flags
const char
unsigned long
320 sys_kexec_file_load int kernel_fd int initrd_fd __user
cmdline_len
*cmdline_ptr
union bpf_attr
321 sys_bpf int cmd unsigned int size
*attr
const char
const char __user
const char __user __user
322 stub_execveat int dfd *const __user
*filename *const
*argv
__user *envp
unsigned long
325 mlock2 size_t len int flags
start
Name
ALSO ON BLOG.RCHAPMAN.ORG
Eclipse Remote System Explorer fails to connect Yubikey NEO for Physical Access Control
RYAN A. CHAPMAN