Menu
Coddy logo textTech

Syscall Exit (60)

Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 32 de 45.

A syscall mais importante para qualquer programa é exit. Sem ela, seu programa continuaria rodando para sempre ou travaria ao chegar ao fim da memória.

O número da syscall exit é 60.

Sintaxe:

mov rax, 60    ; número da syscall para exit
mov rdi, 0     ; código de saída (0 = sucesso)
syscall        ; solicita ao SO para sair

O que acontece quando você executa <strong>syscall</strong> com <strong>rax = 60</strong>:

  1. A CPU salta para o kernel do Linux
  2. O kernel vê: "chamada de sistema exit com código 0"
  1. O kernel encerra seu programa
  2. O kernel devolve o controle ao shell ou sistema operacional

O código de saída 0 significa sucesso — o programa foi concluído sem erros. Os códigos de saída de 1 a 255 indicam erros diferentes. Você pode escolher qualquer número para sinalizar o que deu errado.

Por que os códigos de saída importam:

Depois que seu programa termina, o shell (terminal) armazena o código de saída. Você pode verificá-lo com:

./myprogram
echo $?    ; Imprime o código de saída

Isso é útil para:

  • Scripts que verificam se um programa teve sucesso
  • Depuração (códigos diferentes para erros diferentes)
  • Encadeamento de programas

Um programa mínimo completo:

section .text
    global _start

_start:
    mov rax, 60    ; syscall de saída
    mov rdi, 0     ; código de saída 0 (sucesso)
    syscall

Este programa não faz nada visível — ele apenas sai com sucesso. Mas é um programa válido e completo.

Vamos mencionar o que global _start e _start: são.

CódigoO que éPor que você precisa disso
global _startInforma ao linker onde seu programa começaSem isso, o linker não sabe qual rótulo é o ponto de entrada
_start:Um rótulo que marca o início do seu códigoA CPU começa a execução aqui

Você não precisa memorizar os detalhes. Apenas saiba que todo main.asm deve ter estas duas linhas antes do seu código. Você as usará em todos os programas.

O que acontece se você esquecer a syscall exit?

Se você não incluir a syscall exit, a CPU continuará executando quaisquer dados inúteis (garbage data) que estiverem na memória após o seu código. Isso geralmente causa uma falha de segmentação (segmentation fault/crash) ou um comportamento completamente inesperado. Seu programa não terminará de forma limpa.

Sempre encerre seu programa com uma syscall exit.

challenge icon

Desafio

Adicione a syscall de saída com o código de saída 5.

O código para imprimir a mensagem "Exiting with code 5" já foi fornecido para você. Você não precisa entendê-lo ainda — ele será abordado no Capítulo 5.

Seu trabalho é apenas adicionar a syscall de saída ao final.

Experimente você mesmo

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: Adicionar a syscall de saída com o código de saída 5
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos