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 sairO que acontece quando você executa <strong>syscall</strong> com <strong>rax = 60</strong>:
- A CPU salta para o kernel do Linux
- O kernel vê: "exit syscall with code 0"
- O kernel encerra seu programa
- 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ídaIsso é ú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)
syscallEste 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ódigo | O que é | Por que você precisa disso |
|---|---|---|
global _start | Informa ao linker onde seu programa começa | Sem 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ódigo | A 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.
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
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
1A Máquina
O que é CPUMemóriaRegistradores vs MemóriaComo as instruções funcionamPadrão de Dois ArquivosA Arquitetura x86-64Pratique por conta própria: Playground de Assembly