Menu
CoddyTech

Was ist ein Syscall?

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

Du hast Assemblerbefehle wie mov und lea geschrieben. Diese Befehle werden direkt auf der CPU ausgeführt. Aber was ist, wenn du etwas tun musst, was die CPU nicht selbst kann, etwa etwas auf dem Bildschirm ausgeben, von der Tastatur lesen oder ein Programm beenden?

Für diese Aufgaben benötigst du das Betriebssystem (in diesem Kurs Linux).

Was ist ein Systemaufruf?

Ein Systemaufruf (syscall) ist eine Anfrage deines Programms an das Betriebssystem. So bittest du das Betriebssystem, etwas für dich zu erledigen.

Warum du Systemaufrufe brauchst:

AufgabeKann die CPU das allein erledigen?Systemaufruf erforderlich?
Zwei Zahlen addierenJaNein
Daten zwischen Registern verschiebenJaNein
Text auf dem Bildschirm ausgebenNeinJa
Tastatureingabe lesenNeinJa
Ein Programm beendenNeinJa
Eine Datei öffnenNeinJa

So funktioniert ein Systemaufruf:

  1. Du legst eine Systemaufrufnummer in rax ab (sie teilt dem Betriebssystem mit, was du möchtest)
  2. Du legst Argumente in anderen Registern ab (rdi, rsi, rdx usw.)
  3. Du führst die Anweisung syscall aus
  1. Die CPU springt in den Betriebssystemkernel
  2. Das Betriebssystem führt die Anfrage aus
  3. Das Betriebssystem gibt die Kontrolle an dein Programm zurück

Analogie:

Stell dir einen Systemaufruf wie den Besuch bei einer Behörde vor:

SchrittAnalogieIn Assembly
1Entscheide, welchen Dienst du benötigstWähle die Nummer des Systemaufrufs (in rax eintragen)
2Fülle die Formulare ausLege die Argumente in den Registern ab
3Reiche den Antrag einFühre syscall aus
4Die Behörde bearbeitet den AntragDer Betriebssystemkernel erledigt die Arbeit
5Erhalte dein Ergebnis zurückDas Programm wird fortgesetzt

Systemaufrufe, die du in diesem Kurs kennenlernen wirst:

SystemaufrufNummerFunktionKapitel
exit60Beendet das ProgrammKapitel 4
write1Gibt Text auf dem Bildschirm ausKapitel 5

Der wichtigste Systemaufruf vorerst: exit

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-Nummer für exit
mov rdi, 0     ; Exit-Code (0 = Erfolg)
syscall        ; das Betriebssystem zum Beenden auffordern

Probier es selbst

Diese Lektion enthält keine Programmieraufgabe.

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