Aller au contenu principal
← retour au blog

Les syscall linux pour un langage d'assemblage

La liste des "syscall" pour le noyau Linux !

Écrire en assembleur x86-64 sur Linux implique de dialoguer directement avec le noyau via des appels système (syscalls), sans passer par une bibliothèque comme la libc. Chaque appel se fait avec un numéro placé dans rax, des arguments dans rdi/rsi/rdx/r10/r8/r9, puis l'instruction syscall. Le tableau ci-dessous reprend les appels les plus courants, avec leur numéro, leurs arguments et leur registre de retour.

Documentation complète : https://man7.org/linux/man-pages/man2/syscall.2.html

man syscalls

Linux Syscalls — Référence ASM x86-64

numéro → rax arguments → rdi rsi rdx r10 r8 r9 instruction → syscall retour → rax
NomCatégorierdirsirdxRetour (rax)Description
0readI/Ofdbuf*countoctets lusLit des données depuis un descripteur de fichier
1writeI/Ofdbuf*countoctets écritsÉcrit des données dans un descripteur de fichier
2openFichierpath*flagsmodefdOuvre ou crée un fichier, retourne un fd
3closeFichierfd0Ferme un descripteur de fichier ouvert
4statFichierpath*statbuf*0Récupère les métadonnées d'un fichier
9mmapMémoireaddrlengthprotadresse virtuelleMappe un fichier ou une mémoire anonyme en espace virtuel
11munmapMémoireaddrlength0Libère un mapping mémoire précédemment créé
12brkMémoireaddrnouvelle brkModifie la borne haute du segment de données (tas)
35nanosleepProcessusreq*rem*0Suspend l'exécution pendant une durée précise (ns)
39getpidProcessuspidRetourne le PID du processus courant
41socketRéseaudomaintypeprotocolfd socketCrée un socket réseau (AF_INET, SOCK_STREAM…)
43acceptRéseausockfdaddr*addrlen*fd clientAccepte une connexion entrante sur un socket en écoute
57forkProcessus0 / pid enfantCrée un processus fils — copie exacte du père
59execveProcessuspath*argv**envp**— (remplace)Exécute un programme en remplaçant l'image courante
60exitProcessusstatusne retourne pasTermine le processus avec un code de retour
I/O Fichier Mémoire Processus Signal Réseau
Erreur → rax = −errno  |  i386 → eax + int 0x80  |  Kernel Linux x86-64