Syscall
Un article de Haypo.
Retour aux articles de programmation
Les « syscalls » (appels systèmes) sont des fonctions du noyau Linux permettant d'interagir entre l'espace utilisateur et l'espace noyau. Il y a plusieurs façons de les appeler :
- interruption 0x80
- sysenter
- autres utilisant les 2 premiers:
- syscall() de la libc
- vsyscall() : page mémoire de 4 Ko située à 0xFFFFE000 (adresses 0xFFFFE000..0xFFFFEFFF)
- appel à vsyscall():
0xb7e6d1f1 <mmap+49>: call *%gs:0x10 (gdb) print $gs $3 = 51
- vsyscall = 0xffffe400
0xffffe400 <__kernel_vsyscall+0>: push %ecx 0xffffe401 <__kernel_vsyscall+1>: push %edx 0xffffe402 <__kernel_vsyscall+2>: push %ebp 0xffffe403 <__kernel_vsyscall+3>: mov %esp,%ebp 0xffffe405 <__kernel_vsyscall+5>: sysenter => entre dans le noyau (... des NOP ...) 0xffffe40e <__kernel_vsyscall+14>: jmp 0xffffe403 <__kernel_vsyscall+3> <= syscall interrompu 0xffffe410 <__kernel_vsyscall+16>: pop %ebp <= revient du noyau 0xffffe411 <__kernel_vsyscall+17>: pop %edx 0xffffe412 <__kernel_vsyscall+18>: pop %ecx 0xffffe413 <__kernel_vsyscall+19>: ret
[modifier] Liste des syscall
- Voir le code source de noyau Linux : cherche les fichiers syscall_table.S, sys_call_table.S ou encore syscalls.h.
- Voir le projet Ptrace, module ptrace.syscall
[modifier] Articles connexes
[modifier] Liens externes
- The Linux kernel: System Calls
- i386 vsyscall DSO implementation (2003)
- Linux System Call Table : Attention, très vieille documentation ! (Linux 2.2)

