Menu
Coddy logo textTech

Exit-Syscall (60)

Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 32 von 45.

Der wichtigste Syscall für jedes Programm ist exit. Ohne ihn würde Ihr Programm ewig weiterlaufen oder abstürzen, wenn es das Ende des Speichers erreicht.

Die Nummer des exit-Syscalls ist 60.

Syntax:

mov rax, 60    ; Syscall-Nummer für Beenden
mov rdi, 0     ; Exit-Code (0 = Erfolg)
syscall        ; das Betriebssystem bitten, das Programm zu beenden

Was passiert, wenn Sie <strong>syscall</strong> mit <strong>rax = 60</strong> ausführen:

  1. Die CPU springt in den Linux-Kernel
  2. Der Kernel sieht: „exit syscall mit Code 0“
  1. Der Kernel beendet Ihr Programm
  2. Der Kernel gibt die Steuerung an die Shell oder das Betriebssystem zurück

Exit-Code 0 bedeutet Erfolg — das Programm wurde ohne Fehler abgeschlossen. Exit-Codes 1 bis 255 weisen auf verschiedene Fehler hin. Sie können eine beliebige Zahl wählen, um zu signalisieren, was schiefgelaufen ist.

Warum Exit-Codes wichtig sind:

Nachdem Ihr Programm beendet wurde, speichert die Shell (Terminal) den Exit-Code. Sie können ihn wie folgt überprüfen:

./myprogram
echo $?    ; Gibt den Exit-Code aus

Dies ist nützlich für:

  • Skripte, die prüfen, ob ein Programm erfolgreich war
  • Debugging (verschiedene Codes für verschiedene Fehler)
  • Verkettung von Programmen

Ein vollständiges Minimalprogramm:

section .text
    global _start

_start:
    mov rax, 60    ; Exit-Syscall
    mov rdi, 0     ; Exit-Code 0 (Erfolg)
    syscall

Dieses Programm macht nichts Sichtbares – es wird einfach erfolgreich beendet. Aber es ist ein gültiges, vollständiges Programm.

Lassen Sie uns erwähnen, was global _start und _start: sind.

CodeWas es istWarum Sie es benötigen
global _startTeilt dem Linker mit, wo Ihr Programm beginntOhne dies weiß der Linker nicht, welches Label der Einstiegspunkt ist
_start:Ein Label, das den Beginn Ihres Codes markiertDie CPU beginnt hier mit der Ausführung

Sie müssen sich die Details nicht merken. Wissen Sie einfach, dass jede main.asm diese zwei Zeilen vor Ihrem Code haben muss. Sie werden sie in jedem Programm verwenden.

Was passiert, wenn Sie den exit-Syscall vergessen?

Wenn Sie den exit-Syscall nicht einfügen, wird die CPU weiterhin alle Datenmüll-Reste ausführen, die sich zufällig nach Ihrem Code im Speicher befinden. Dies führt normalerweise zu einem Speicherzugriffsfehler (Segmentation Fault/Absturz) oder völlig unerwartetem Verhalten. Ihr Programm wird nicht sauber beendet.

Beenden Sie Ihr Programm immer mit einem exit-Systemaufruf.

challenge icon

Aufgabe

Füge den exit syscall mit dem exit code 5 hinzu.

Der Code zum Ausgeben der Nachricht "Exiting with code 5" ist bereits für dich bereitgestellt. Du musst ihn noch nicht verstehen – er wird in Kapitel 5 behandelt.

Deine Aufgabe ist es nur, den exit syscall am Ende hinzuzufügen.

Probier es selbst

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: Den Exit-Syscall mit Exit-Code 5 hinzufügen
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen