Menu
Coddy logo textTech

Syscall Exit (60)

Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 32 sur 45.

L’appel système le plus important pour tout programme est exit. Sans lui, votre programme continuerait à s’exécuter indéfiniment ou planterait lorsqu’il atteindrait la fin de la mémoire.

Le numéro de l’appel système exit est 60.

Syntaxe :

mov rax, 60    ; numéro de syscall pour exit
mov rdi, 0     ; code de sortie (0 = succès)
syscall        ; demander à l'OS de quitter

Que se passe-t-il lorsque vous exécutez <strong>syscall</strong> avec <strong>rax = 60</strong> :

  1. Le CPU entre dans le noyau Linux
  2. Le noyau voit : "exit syscall with code 0"
  1. Le noyau met fin à votre programme
  2. Le noyau rend le contrôle au shell ou au système d’exploitation

Le code de sortie 0 signifie le succès : le programme s’est terminé sans erreurs. Les codes de sortie de 1 à 255 indiquent différentes erreurs. Vous pouvez choisir n’importe quel nombre pour signaler ce qui s’est mal passé.

Pourquoi les codes de sortie sont importants :

Après la fin de votre programme, le shell (terminal) stocke le code de sortie. Vous pouvez le vérifier avec :

./myprogram
echo $?    ; Affiche le code de sortie

Cela est utile pour :

  • Les scripts qui vérifient si un programme a réussi
  • Le débogage (des codes différents pour des erreurs différentes)
  • L’enchaînement de programmes

Un programme minimal complet :

section .text
    global _start

_start:
    mov rax, 60    ; syscall exit
    mov rdi, 0     ; code de sortie 0 (succès)
    syscall

Ce programme ne fait rien de visible. Il se contente de se terminer avec succès. Mais c’est un programme valide et complet.

Indiquons ce que sont global _start et _start:.

CodeCe que c’estPourquoi vous en avez besoin
global _startIndique à l’éditeur de liens où votre programme commenceSans cela, l’éditeur de liens ne sait pas quel label est le point d’entrée
_start:Un label marquant le début de votre codeLe CPU commence son exécution ici

Tu n’as pas besoin de mémoriser les détails. Sache simplement que chaque main.asm doit contenir ces deux lignes avant ton code. Tu les utiliseras dans chaque programme.

Que se passe-t-il si vous oubliez l’appel système de sortie ?

Si vous n’incluez pas l’appel système de sortie, le CPU continuera d’exécuter les données incohérentes qui se trouvent en mémoire après votre code. Cela provoque généralement une erreur de segmentation (plantage) ou un comportement complètement inattendu. Votre programme ne se terminera pas correctement.

Termine toujours ton programme par un appel système de sortie.

challenge icon

Défi

Ajoutez l’appel système de sortie avec le code de sortie 5.

Le code permettant d’afficher le message "Exiting with code 5" vous est déjà fourni. Vous n’avez pas encore besoin de le comprendre. Il sera abordé au chapitre 5.

Votre tâche consiste uniquement à ajouter l’appel système de sortie à la fin.

Essayez vous-même

section .data
    msg db 'Exiting with code 5', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msgLen
    syscall

; TODO: Ajouter le syscall exit avec le code de sortie 5
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Playground Assembly