Menu
Coddy logo textTech

File Descriptor (rdi)

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

In der vorherigen Lektion haben Sie mov rdi, 1 als Teil des write-Syscalls verwendet. Diese Nummer 1 wird Dateideskriptor genannt.

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

Die drei Standard-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) gehen auf denselben Bildschirm, werden aber getrennt behandelt. Dies ermöglicht es Ihnen:

  • Die normale Ausgabe in eine Datei umzuleiten, während Fehler weiterhin auf dem Bildschirm angezeigt werden
  • Fehler anzuzeigen, selbst wenn die normale Ausgabe ausgeblendet ist

Für die Ausgabe in diesem Kurs:

Sie werden immer den Dateideskriptor 1 (stdout) verwenden, um Nachrichten auszugeben. Sie benötigen stderr noch nicht.

Beispiel:

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

Was passiert, wenn Sie den falschen Dateideskriptor verwenden?

Bei Verwendung vonErgebnis
0 (stdin)Der write-Syscall erwartet eine Eingabe, keine Ausgabe – er wird fehlschlagen oder nichts tun
2 (stderr)Funktioniert wie stdout (Ausgabe auf dem Bildschirm), ist aber für Fehler gedacht
Jede andere NummerDer Kernel erkennt sie nicht – der Syscall schlägt fehl
challenge icon

Aufgabe

Dir wird ein String namens message mit dem Wert 'OK' gefolgt von einem Zeilenumbruch gegeben. Schreibe die Codezeile, die den Dateideskriptor so einstellt, dass er auf den Bildschirm (stdout) ausgibt. 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 worden 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