Menu
Coddy logo textTech

Chiamata di sistema di uscita (60)

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

La chiamata di sistema più importante per qualsiasi programma è exit. Senza di essa, il tuo programma continuerebbe a essere eseguito per sempre o andrebbe in crash quando raggiunge la fine della memoria.

Il numero della chiamata di sistema exit è 60.

Sintassi:

mov rax, 60    ; numero di syscall per l'uscita
mov rdi, 0     ; codice di uscita (0 = successo)
syscall        ; chiede al sistema operativo di terminare

Cosa succede quando esegui <strong>syscall</strong> con <strong>rax = 60</strong>:

  1. La CPU passa al kernel di Linux
  2. Il kernel vede: "exit syscall with code 0"
  1. Il kernel termina il tuo programma
  2. Il kernel restituisce il controllo alla shell o al sistema operativo

Il codice di uscita 0 indica il successo: il programma è stato completato senza errori. I codici di uscita da 1 a 255 indicano errori diversi. Puoi scegliere qualsiasi numero per segnalare cosa è andato storto.

Perché i codici di uscita sono importanti:

Dopo che il programma termina, la shell (terminale) memorizza il codice di uscita. Puoi verificarlo con:

./myprogram
echo $?    ; Prints the exit code

È utile per:

  • Script che verificano se un programma è terminato correttamente
  • Debugging (codici diversi per errori diversi)
  • Collegare tra loro i programmi

Un programma minimo completo:

section .text
    global _start

_start:
    mov rax, 60    ; syscall di uscita
    mov rdi, 0     ; codice di uscita 0 (successo)
    syscall

Questo programma non fa nulla di visibile. Semplicemente termina correttamente. Ma è un programma valido e completo.

Vediamo cosa sono global _start e _start:.

CodiceChe cos'èPerché ti serve
global _startIndica al linker dove inizia il programmaSenza di esso, il linker non sa quale etichetta sia il punto di ingresso
_start:Un'etichetta che segna l'inizio del codiceLa CPU inizia l'esecuzione qui

Non devi memorizzare i dettagli. Ti basta sapere che ogni main.asm deve avere queste due righe prima del tuo codice. Le userai in ogni programma.

Cosa succede se dimentichi la chiamata di sistema exit?

Se non includi la chiamata di sistema exit, la CPU continuerà a eseguire qualsiasi dato spazzatura si trovi in memoria dopo il tuo codice. Questo di solito causa un errore di segmentazione (crash) o un comportamento completamente inaspettato. Il tuo programma non terminerà correttamente.

Termina sempre il tuo programma con una chiamata di sistema di uscita.

challenge icon

Sfida

Aggiungi la syscall di uscita con codice di uscita 5.

Il codice per stampare il messaggio "Exiting with code 5" è già stato fornito. Non è ancora necessario comprenderlo. Verrà trattato nel capitolo 5.

Il tuo compito è solo aggiungere la syscall di uscita alla fine.

Provalo tu

section .data
    msg db 'Exiting with code 5', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msgLen
    syscall

; TODO: Aggiungi la syscall di uscita con codice di uscita 5
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