Menu
Coddy logo textTech

File Descriptor (rdi)

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

In der vorherigen Lektion hast du mov rdi, 1 als Teil des write-Systemaufrufs verwendet. Diese Zahl 1 wird als Dateideskriptor bezeichnet.

Ein Dateideskriptor ist eine Zahl, die dem Betriebssystem mitteilt, wohin die Daten gesendet werden sollen.

Die drei standardmäßigen Dateideskriptoren in Linux:

DateideskriptorNameWohin die Daten gehen
0stdinTastatureingabe (Daten vom Benutzer lesen)
1stdoutBildschirmausgabe (normale Programmausgabe)
2stderrBildschirmausgabe (Fehlermeldungen)

Warum gibt es zwei Ausgaben für den Bildschirm?

Die normale Ausgabe (stdout) und die Fehlerausgabe (stderr) werden an denselben Bildschirm gesendet, aber getrennt behandelt. Dadurch kannst du:

  • Die normale Ausgabe in eine Datei umleiten und trotzdem Fehler auf dem Bildschirm sehen
  • Fehler anzeigen, selbst wenn die normale Ausgabe ausgeblendet ist

Zum Ausgeben in diesem Kurs:

Du verwendest zum Ausgeben von Meldungen immer den Dateideskriptor 1 (stdout). stderr brauchst du vorerst nicht.

Beispiel:

mov rdi, 1      ; Ausgabe an stdout senden (den Bildschirm)

Was passiert, wenn du den falschen Dateideskriptor verwendest?

Wenn duErgebnis
0 (stdin)Der write-Systemaufruf erwartet Eingaben, keine Ausgaben: Er schlägt fehl oder tut nichts
2 (stderr)Funktioniert wie stdout (gibt etwas auf dem Bildschirm aus), ist aber für Fehler gedacht
Eine beliebige andere ZahlDer Kernel erkennt sie nicht: Der Systemaufruf schlägt fehl
challenge icon

Aufgabe

Gegeben ist eine Zeichenfolge namens message mit dem Wert 'OK', gefolgt von einem Zeilenumbruch. Schreibe die Codezeile, die den Dateideskriptor so festlegt, dass auf dem Bildschirm (stdout) ausgegeben wird. Schreibe nur die mov-Anweisung für rdi.

Probier es selbst

section .data
    message db 'OK', 0x0a
    msgLen equ $ - message

section .text
    global _start

_start:
    ; Student setzt hier den Dateideskriptor
    %include "solution.asm"
    
    mov rax, 1
    ; rdi sollte bereits vom Studenten gesetzt sein
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
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