Syscall

Un article de Haypo.

Retour à la page précédente 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