Was ist ein Syscall?
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 31 von 45.
Sie haben Assembler-Befehle wie mov und lea geschrieben. Diese Befehle werden direkt auf der CPU ausgeführt. Aber was ist, wenn Sie etwas tun müssen, das die CPU nicht alleine tun kann – wie zum Beispiel auf den Bildschirm ausgeben, von der Tastatur lesen oder ein Programm beenden?
Für diese Aufgaben benötigen Sie das Betriebssystem (Linux, in diesem Kurs).
Was ist ein Syscall?
Ein Syscall (Systemaufruf) ist eine Anfrage Ihres Programms an das Betriebssystem. So bitten Sie das Betriebssystem, etwas für Sie zu tun.
Warum man Syscalls benötigt:
| Aufgabe | Kann die CPU das alleine? | Syscall erforderlich? |
|---|---|---|
| Zwei Zahlen addieren | Ja | Nein |
| Daten zwischen Registern verschieben | Ja | Nein |
| Text auf dem Bildschirm ausgeben | Nein | Ja |
| Tastatureingabe lesen | Nein | Ja |
| Ein Programm beenden | Nein | Ja |
| Eine Datei öffnen | Nein | Ja |
Wie ein Syscall funktioniert:
- Man legt eine Syscall-Nummer in
rax(teilt dem Betriebssystem mit, was man möchte) - Man legt Argumente in andere Register (
rdi,rsi,rdx, etc.) - Man führt den
syscall-Befehl aus
- Die CPU springt in den Betriebssystem-Kernel
- Das Betriebssystem führt die Anfrage aus
- Das Betriebssystem gibt die Kontrolle an Ihr Programm zurück
Analogie:
Stellen Sie sich einen Syscall wie den Anruf bei einer Behörde vor:
| Schritt | Analogie | In Assembly |
|---|---|---|
| 1 | Entscheiden Sie, welchen Dienst Sie benötigen | Syscall-Nummer wählen (in rax schreiben) |
| 2 | Formulare ausfüllen | Argumente in Register schreiben |
| 3 | Anfrage einreichen | syscall ausführen |
| 4 | Behörde bearbeitet sie | Betriebssystem-Kernel erledigt die Arbeit |
| 5 | Ergebnis erhalten | Programm wird fortgesetzt |
Syscalls, die Sie in diesem Kurs lernen werden:
| Syscall | Nummer | Funktion | Kapitel |
|---|---|---|---|
exit | 60 | Beendet das Programm | Kapitel 4 |
write | 1 | Gibt Text auf dem Bildschirm aus | Kapitel 5 |
Der wichtigste Syscall für den Moment: <strong>exit</strong>
Ohne exit würde Ihr Programm ewig weiterlaufen oder abstürzen. Jedes Programm, das Sie schreiben, muss mit einem exit-Syscall enden.
mov rax, 60 ; Syscall-Nummer für exit
mov rdi, 0 ; Exit-Code (0 = Erfolg)
syscall ; das Betriebssystem zum Beenden auffordernProbier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 Architektur