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 muito importante para qualquer programa é exit. Sem ela, seu programa continuaria executando para sempre ou travaria ao alcançar o 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        ; pede 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ê: "exit syscall with code 0"
  1. O kernel encerra seu programa
  2. O kernel devolve o controle ao shell ou ao 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 são importantes:

Depois que seu programa é encerrado, 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 foi executado com 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 simplesmente é encerrado com sucesso. Mas é um programa válido e completo.

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

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 executar aqui

Você não precisa memorizar os detalhes. Basta saber 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 de saída?

Se você não incluir a syscall de saída, a CPU continuará executando quaisquer dados indesejados que estejam na memória após o seu código. Isso geralmente causa uma falha de segmentação (travamento) ou um comportamento completamente inesperado. Seu programa não terminará corretamente.

Sempre termine seu programa com uma syscall de saída.

challenge icon

Desafio

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

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

Sua tarefa é apenas adicionar o syscall exit 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: Adicione 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

Pratique por conta própria: Playground de Assembly