Menu
Coddy logo textTech

Exit-Syscall (60)

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

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

Die Nummer des exit-Systemaufrufs ist 60.

Syntax:

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

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

  1. Die CPU springt in den Linux-Kernel
  2. Der Kernel sieht: "exit syscall with code 0"
  1. Der Kernel beendet dein Programm
  2. Der Kernel gibt die Kontrolle an die Shell oder das Betriebssystem zurück

Der Exit-Code 0 bedeutet Erfolg: Das Programm wurde ohne Fehler abgeschlossen. Exit-Codes von 1 bis 255 weisen auf verschiedene Fehler hin. Du kannst eine beliebige Zahl auswählen, um zu signalisieren, was schiefgelaufen ist.

Warum Exit-Codes wichtig sind:

Nachdem dein Programm beendet wurde, speichert die Shell (das Terminal) den Exit-Code. Du kannst ihn mit Folgendem überprüfen:

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

Dies ist nützlich für:

  • Skripte, die prüfen, ob ein Programm erfolgreich war
  • Fehlerbehebung (unterschiedliche Codes für unterschiedliche Fehler)
  • Das Verketten von Programmen

Ein vollständiges Minimalprogramm:

section .text
    global _start

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

Dieses Programm tut nichts Sichtbares. Es beendet sich einfach erfolgreich. Aber es ist ein gültiges, vollständiges Programm.

Sehen wir uns an, was global _start und _start: sind.

CodeWas es istWarum du es brauchst
global _startTeilt dem linker mit, wo dein Programm beginntOhne diese Angabe weiß der linker nicht, welches Label der Einstiegspunkt ist
_start:Ein Label, das den Beginn deines Codes markiertDie CPU beginnt hier mit der Ausführung

Du musst dir die Details nicht merken. Du solltest nur wissen, dass jedes main.asm diese beiden Zeilen vor deinem Code enthalten muss. Du wirst sie in jedem Programm verwenden.

Was passiert, wenn du den exit syscall vergisst?

Wenn du den exit syscall nicht einfügst, führt die CPU weiterhin beliebige Daten aus, die sich zufällig nach deinem Code im Speicher befinden. Das verursacht normalerweise einen Speicherzugriffsfehler (Absturz) oder völlig unerwartetes Verhalten. Dein Programm wird nicht ordnungsgemäß beendet.

Beende dein Programm immer mit einem exit-syscall.

challenge icon

Aufgabe

Füge den Exit-Systemaufruf 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 besteht nur darin, am Ende den Exit-Systemaufruf 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: Füge den Exit-Syscall mit Exit-Code 5 hinzu
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

Übe selbstständig: Assembly-Playground