Assembleur RPI- Linux-Syscall

Niveau:3

En informatique, un appel système (en anglais, system call, abrégé en syscall) est une fonction primitive fournie par le noyau d’un système d’exploitation et utilisée par les programmes s’exécutant dans l’espace utilisateur (en d’autres termes, tous les processus distincts du noyau). Ce système permet de contrôler de façon sécurisée les applications dans l’espace utilisateur.
Le rôle du noyau est de gérer les ressources matérielles (il contient des pilotes de périphériques) et de fournir aux programmes une interface uniforme pour l’accès à ces ressources.

Nous allons voir l’utilisation des ressources syscall en assembleur avec le Raspberry.
L’appel à la fonction se fait via une interruption software. Plus précisément swi #0.
Les registres permettent de passer les arguments et de transmettre les informations de retour:

 

Registre Fonction
R7 Numéros de la fonction.
R0 Paramètre 1 de la fonction
R1 Paramètre 2 de la fonction
R2 Paramètre 3 de la fonction
R3 Paramètre 4 de la fonction
R4 Paramètre 5 de la fonction
R0 Valeur de retour ou code erreur

Voici le Tableau des Fonctions:

R7
Nom
Source
R0
R1
R2
R3
R4
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
21
sys_mount
fs/super.c
char *
char *
char *
22
sys_oldumount
fs/super.c
char *
23
sys_setuid
kernel/sys.c
uid_t
24
sys_getuid
kernel/sched.c
25
sys_stime
kernel/time.c
int *
26
sys_ptrace
arch/i386
/kernel/ptrace.c
long
long
long
long
27
sys_alarm
kernel/sched.c
unsigned int
28
sys_fstat
fs/stat.c
unsigned int
struct __old_kernel_stat *
29
sys_pause
arch/i386
/kernel/sys_i386.c
30
sys_utime
fs/open.c
char *
struct utimbuf *
33
sys_access
fs/open.c
const char *
int
34
sys_nice
kernel/sched.c
int
36
sys_sync
fs/buffer.c
37
sys_kill
kernel/signal.c
int
int
38
sys_rename
fs/namei.c
const char *
const char *
39
sys_mkdir
fs/namei.c
const char *
int
40
sys_rmdir
fs/namei.c
const char *
41
sys_dup
fs/fcntl.c
unsigned int
42
sys_pipe
arch/i386
/kernel/sys_i386.c
unsigned long *
43
sys_times
kernel/sys.c
struct tms *
45
sys_brk
mm/mmap.c
unsigned long
46
sys_setgid
kernel/sys.c
gid_t
47
sys_getgid
kernel/sched.c
48
sys_signal
kernel/signal.c
int
__sighandler_t
49
sys_geteuid
kernel/sched.c
50
sys_getegid
kernel/sched.c
51
sys_acct
kernel/acct.c
const char *
52
sys_umount
fs/super.c
char *
int
54
sys_ioctl
fs/ioctl.c
unsigned int
unsigned int
unsigned long
55
sys_fcntl
fs/fcntl.c
unsigned int
unsigned int
unsigned long
57
sys_setpgid
kernel/sys.c
pid_t
pid_t
59
sys_olduname
arch/i386
/kernel/sys_i386.c
struct
oldold_utsname *
60
sys_umask
kernel/sys.c
int
61
sys_chroot
fs/open.c
const char *
62
sys_ustat
fs/super.c
dev_t
struct ustat *
63
sys_dup2
fs/fcntl.c
unsigned int
unsigned int
64
sys_getppid
kernel/sched.c
65
sys_getpgrp
kernel/sys.c
66
sys_setsid
kernel/sys.c
67
sys_sigaction
arch/i386
/kernel/signal.c
int
const
struct old_sigaction *
struct
old_sigaction *
68
sys_sgetmask
kernel/signal.c
69
sys_ssetmask
kernel/signal.c
int
70
sys_setreuid
kernel/sys.c
uid_t
uid_t
71
sys_setregid
kernel/sys.c
gid_t
gid_t
72
sys_sigsuspend
arch/i386
/kernel/signal.c
int
int
old_sigset_t
73
sys_sigpending
kernel/signal.c
old_sigset_t *
74
sys_sethostname
kernel/sys.c
char *
int
75
sys_setrlimit
kernel/sys.c
unsigned int
struct rlimit *
76
sys_getrlimit
kernel/sys.c
unsigned int
struct rlimit *
77
sys_getrusage
kernel/sys.c
int
struct rusage *
78
sys_gettimeofday
kernel/time.c
struct timeval *
struct timezone *
79
sys_settimeofday
kernel/time.c
struct timeval *
struct timezone *
80
sys_getgroups
kernel/sys.c
int
gid_t *
81
sys_setgroups
kernel/sys.c
int
gid_t *
82
old_select
arch/i386
/kernel/sys_i386.c
struct sel_arg_struct *
83
sys_symlink
fs/namei.c
const char *
const char *
84
sys_lstat
fs/stat.c
char *
struct __old_kernel_stat *
85
sys_readlink
fs/stat.c
const char *
char *
int
86
sys_uselib
fs/exec.c
const char *
87
sys_swapon
mm/swapfile.c
const char *
int
88
sys_reboot
kernel/sys.c
int
int
int
void *
89
old_readdir
fs/readdir.c
unsigned int
void *
unsigned int
90
old_mmap
arch/i386
/kernel/sys_i386.c
struct
mmap_arg_struct *
91
sys_munmap
mm/mmap.c
unsigned long
size_t
92
sys_truncate
fs/open.c
const char *
unsigned long
93
sys_ftruncate
fs/open.c
unsigned int
unsigned long
94
sys_fchmod
fs/open.c
unsigned int
mode_t
95
sys_fchown
fs/open.c
unsigned int
uid_t
gid_t
96
sys_getpriority
kernel/sys.c
int
int
97
sys_setpriority
kernel/sys.c
int
int
int
99
sys_statfs
fs/open.c
const char *
struct statfs *
100
sys_fstatfs
fs/open.c
unsigned int
struct statfs *
101
sys_ioperm
arch/i386
/kernel/ioport.c
unsigned long
unsigned long
int
102
sys_socketcall
net/socket.c
int
unsigned long *
103
sys_syslog
kernel/printk.c
int
char *
int
104
sys_setitimer
kernel/itimer.c
int
struct itimerval *
struct itimerval *
105
sys_getitimer
kernel/itimer.c
int
struct itimerval *
106
sys_newstat
fs/stat.c
char *
struct stat *
107
sys_newlstat
fs/stat.c
char *
struct stat *
108
sys_newfstat
fs/stat.c
unsigned int
struct stat *
109
sys_uname
arch/i386
/kernel/sys_i386.c
struct old_utsname *
110
sys_iopl
arch/i386
/kernel/ioport.c
unsigned long
111
sys_vhangup
fs/open.c
112
sys_idle
arch/i386
/kernel/process.c
113
sys_vm86old
arch/i386
/kernel/vm86.c
unsigned long
struct
vm86plus_struct *
114
sys_wait4
kernel/exit.c
pid_t
unsigned long *
int options
struct rusage *
115
sys_swapoff
mm/swapfile.c
const char *
116
sys_sysinfo
kernel/info.c
struct sysinfo *
117
sys_ipc
arch/i386
/kernel/sys_i386.c
uint
int
int
int
void *
118
sys_fsync
fs/buffer.c
unsigned int
119
sys_sigreturn
arch/i386
/kernel/signal.c
unsigned long
120
sys_clone
arch/i386
/kernel/process.c
struct pt_regs
121
sys_setdomainname
kernel/sys.c
char *
int
122
sys_newuname
kernel/sys.c
struct new_utsname *
123
sys_modify_ldt
arch/i386
/kernel/ldt.c
int
void *
unsigned long
124
sys_adjtimex
kernel/time.c
struct timex *
125
sys_mprotect
mm/mprotect.c
unsigned long
size_t
unsigned long
126
sys_sigprocmask
kernel/signal.c
int
old_sigset_t *
old_sigset_t *
127
sys_create_module
kernel/module.c
const char *
size_t
128
sys_init_module
kernel/module.c
const char *
struct module *
129
sys_delete_module
kernel/module.c
const char *
130
sys_get_kernel_syms
kernel/module.c
struct kernel_sym *
131
sys_quotactl
fs/dquot.c
int
const char *
int
caddr_t
132
sys_getpgid
kernel/sys.c
pid_t
133
sys_fchdir
fs/open.c
unsigned int
134
sys_bdflush
fs/buffer.c
int
long
135
sys_sysfs
fs/super.c
int
unsigned long
unsigned long
136
sys_personality
kernel/exec_domain.c
unsigned long
138
sys_setfsuid
kernel/sys.c
uid_t
139
sys_setfsgid
kernel/sys.c
gid_t
140
sys_llseek
fs/read_write.c
unsigned int
unsigned long
unsigned long
loff_t *
unsigned int
141
sys_getdents
fs/readdir.c
unsigned int
void *
unsigned int
142
sys_select
fs/select.c
int
fd_set *
fd_set *
fd_set *
struct timeval *
143
sys_flock
fs/locks.c
unsigned int
unsigned int
144
sys_msync
mm/filemap.c
unsigned long
size_t
int
145
sys_readv
fs/read_write.c
unsigned long
const struct iovec *
unsigned long
146
sys_writev
fs/read_write.c
unsigned long
const struct iovec *
unsigned long
147
sys_getsid
kernel/sys.c
pid_t
148
sys_fdatasync
fs/buffer.c
unsigned int
149
sys_sysctl
kernel/sysctl.c
struct __sysctl_args *
150
sys_mlock
mm/mlock.c
unsigned long
size_t
151
sys_munlock
mm/mlock.c
unsigned long
size_t
152
sys_mlockall
mm/mlock.c
int
153
sys_munlockall
mm/mlock.c
154
sys_sched_setparam
kernel/sched.c
pid_t
struct sched_param *
155
sys_sched_getparam
kernel/sched.c
pid_t
struct sched_param *
156
sys_sched_setscheduler
kernel/sched.c
pid_t
int
struct
sched_param *
157
sys_sched_getscheduler
kernel/sched.c
pid_t
158
sys_sched_yield
kernel/sched.c
159
sys_sched_get_priority_max
kernel/sched.c
int
160
sys_sched_get_priority_min
kernel/sched.c
int
161
sys_sched_rr_get_interval
kernel/sched.c
pid_t
struct timespec *
162
sys_nanosleep
kernel/sched.c
struct timespec *
struct timespec *
163
sys_mremap
mm/mremap.c
unsigned long
unsigned long
unsigned long
unsigned long
164
sys_setresuid
kernel/sys.c
uid_t
uid_t
uid_t
165
sys_getresuid
kernel/sys.c
uid_t *
uid_t *
uid_t *
166
sys_vm86
arch/i386
/kernel/vm86.c
struct vm86_struct *
167
sys_query_module
kernel/module.c
const char *
int
char *
size_t
size_t *
168
sys_poll
fs/select.c
struct pollfd *
unsigned int
long
169
sys_nfsservctl
fs/filesystems.c
int
void *
void *
170
sys_setresgid
kernel/sys.c
gid_t
gid_t
gid_t
171
sys_getresgid
kernel/sys.c
gid_t *
gid_t *
gid_t *
172
sys_prctl
kernel/sys.c
int
unsigned long
unsigned long
unsigned long
unsigned long
173
sys_rt_sigreturn
arch/i386
/kernel/signal.c
unsigned long
174
sys_rt_sigaction
kernel/signal.c
int
const struct sigaction *
struct sigaction *
size_t
175
sys_rt_sigprocmask
kernel/signal.c
int
sigset_t *
sigset_t *
size_t
176
sys_rt_sigpending
kernel/signal.c
sigset_t *
size_t
177
sys_rt_sigtimedwait
kernel/signal.c
const sigset_t *
siginfo_t *
const
struct timespec *
size_t
178
sys_rt_sigqueueinfo
kernel/signal.c
int
int
siginfo_t *
179
sys_rt_sigsuspend
arch/i386
/kernel/signal.c
sigset_t *
size_t
180
sys_pread
fs/read_write.c
unsigned int
char *
size_t
loff_t
181
sys_pwrite
fs/read_write.c
unsigned int
const char *
size_t
loff_t
182
sys_chown
fs/open.c
const char *
uid_t
gid_t
183
sys_getcwd
fs/dcache.c
char *
unsigned long
184
sys_capget
kernel/capability.c
cap_user_header_t
cap_user_data_t
185
sys_capset
kernel/capability.c
cap_user_header_t
const cap_user_data_t
186
sys_sigaltstack
arch/i386
/kernel/signal.c
const stack_t *
stack_t *
187
sys_sendfile
mm/filemap.c
int
int
off_t *
size_t
190
sys_vfork
arch/i386
/kernel/process.c
struct pt_regs