Menu
CoddyTech

Descrittore di file (rdi)

Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 36 di 45.

Nella lezione precedente, hai usato mov rdi, 1 come parte della chiamata di sistema write. Quel numero 1 è chiamato descrittore di file.

Un descrittore di file è un numero che indica al sistema operativo dove inviare i dati.

I tre descrittori di file standard in Linux:

Descrittore di fileNomeDove vanno i dati
0stdinInput da tastiera (leggi i dati dall’utente)
1stdoutOutput sullo schermo (output normale del programma)
2stderrOutput sullo schermo (messaggi di errore)

Perché ci sono due output per lo schermo?

L'output normale (stdout) e quello degli errori (stderr) vengono inviati allo stesso schermo, ma sono gestiti separatamente. Questo ti permette di:

  • Reindirizzare l'output normale a un file continuando a visualizzare gli errori sullo schermo
  • Visualizzare gli errori anche quando l'output normale è nascosto

Per stampare in questo corso:

Per stampare i messaggi, userai sempre il descrittore di file 1 (stdout). Per ora non ti serve stderr.

Esempio:

mov rdi, 1      ; invia l'output a stdout (lo schermo)

Cosa succede se usi il descrittore di file sbagliato?

Se usiRisultato
0 (stdin)La chiamata di sistema non riesce se l'input proviene da una pipe o da un file. In un terminale, il testo viene solitamente comunque stampato, ma stdin è destinato all'input, non all'output
2 (stderr)Funziona come stdout (stampa sullo schermo), ma è destinato agli errori
Qualsiasi altro numeroIl kernel non lo riconosce: la chiamata di sistema non riesce
challenge icon

Sfida

Ti viene fornita una stringa chiamata message con il valore 'OK' seguito da una nuova riga. Scrivi la riga di codice che imposta il descrittore di file per stampare sullo schermo (stdout). Scrivi solo l’istruzione mov per rdi.

Provalo tu

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

section .text
    global _start

_start:
    ; Lo studente imposta qui il descrittore di file
    %include "solution.asm"
    
    mov rax, 1
    ; rdi dovrebbe essere già stato impostato dallo studente
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly