Was ist ein Syscall?
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 31 von 45.
Du hast Assembly-Anweisungen wie mov und lea geschrieben. Diese Anweisungen werden direkt auf der CPU ausgeführt. Aber was ist, wenn du etwas tun musst, das die CPU nicht selbst erledigen kann, zum Beispiel etwas auf dem Bildschirm ausgeben, von der Tastatur lesen oder ein Programm beenden?
Für diese Aufgaben benötigst du das Betriebssystem (Linux, in diesem Kurs).
Was ist ein Systemaufruf?
Ein syscall (Systemaufruf) ist eine Anfrage deines Programms an das Betriebssystem. So bittest du das Betriebssystem, etwas für dich zu erledigen.
Warum du Systemaufrufe benötigst:
| Aufgabe | Kann die CPU dies allein erledigen? | Systemaufruf erforderlich? |
|---|---|---|
| Zwei Zahlen addieren | Ja | Nein |
| Daten zwischen Registern verschieben | Ja | Nein |
| Text auf dem Bildschirm ausgeben | Nein | Ja |
| Tastatureingaben lesen | Nein | Ja |
| Ein Programm beenden | Nein | Ja |
| Eine Datei öffnen | Nein | Ja |
So funktioniert ein Syscall:
- Du legst eine Syscall-Nummer in
raxab (teilst dem Betriebssystem mit, was du möchtest) - Du legst Argumente in anderen Registern ab (
rdi,rsi,rdxusw.) - Du führst die
syscall-Anweisung aus
- Die CPU springt in den Kernel des Betriebssystems
- Das Betriebssystem führt die Anfrage aus
- Das Betriebssystem gibt die Kontrolle an dein Programm zurück
Analogie:
Stell dir einen Systemaufruf wie den Anruf bei einer Behörde vor:
| Schritt | Analogie | In Assembly |
|---|---|---|
| 1 | Entscheide, welchen Dienst du benötigst | Wähle die Nummer des Systemaufrufs (in rax schreiben) |
| 2 | Fülle die Formulare aus | Lege die Argumente in die Register |
| 3 | Reiche den Antrag ein | Führe syscall aus |
| 4 | Die Behörde verarbeitet ihn | Der Betriebssystemkernel erledigt die Arbeit |
| 5 | Erhalte dein Ergebnis zurück | Das Programm wird fortgesetzt |
Systemaufrufe, die du in diesem Kurs lernen wirst:
| Systemaufruf | Nummer | Was er tut | Kapitel |
|---|---|---|---|
exit | 60 | Beendet das Programm | Kapitel 4 |
write | 1 | Gibt Text auf dem Bildschirm aus | Kapitel 5 |
Der wichtigste Systemaufruf für jetzt: <strong>exit</strong>
Ohne exit würde dein Programm für immer weiterlaufen oder abstürzen. Jedes Programm, das du schreibst, muss mit einem exit-Systemaufruf enden.
mov rax, 60 ; syscall number for exit
mov rdi, 0 ; exit code (0 = success)
syscall ; ask the OS to exitProbier 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Übe selbstständig: Assembly-Playground