Menu
CoddyTech

Syscall Exit (60)

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

A chamada de sistema mais importante para qualquer programa é exit. Sem ela, seu programa continuaria em execução para sempre ou travaria ao chegar ao fim da memória.

O número da chamada de sistema 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 sistema operacional que encerre o programa

O que acontece quando você executa syscall com rax = 60:

  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 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 diferentes erros. 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 $?    ; Prints the exit code

Isso é útil para:

  • Scripts que verificam se um programa foi executado com sucesso
  • Depuração (códigos diferentes para erros diferentes)
  • Encadear programas

Um programa mínimo completo:

section .text
    global _start

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

Este programa não faz nada visível. Ele simplesmente termina 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 precisa ter estas duas linhas antes do seu código. Você as usará em todos os programas.

O que acontece se você esquecer a chamada de sistema exit?

Se você não incluir a chamada de sistema exit, a CPU continuará executando quaisquer dados sem sentido que estiverem 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 encerre seu programa com uma chamada de sistema de saída.

challenge icon

Desafio

Adicione a chamada de sistema 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. Você ainda não precisa entendê-lo. Esse conteúdo será abordado no Capítulo 5.

Sua única tarefa é adicionar a chamada de sistema de saída no 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 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