Assembly x86-64Exemplos
Exemplo — Linux
write + exit por syscall direta
Exemplo — Linux (syscall direta)
Um programa completo que escreve na saída padrão e encerra usando apenas syscalls, sem libc. Repare no mapeamento rax = número, rdi/rsi/rdx = argumentos, e em como syscall destrói rcx e r11.
; Linux x86-64 — escreve "Hi\n" no stdout e encerra o processo.
; Monte com: nasm -f elf64 hi.asm && ld hi.o -o hi
section .data
msg: db "Hi", 10 ; a string seguida de '\n' (0x0A)
len: equ $ - msg ; comprimento calculado na montagem
section .text
global _start
_start:
mov rax, 1 ; nº da syscall: 1 = write
mov rdi, 1 ; arg 1: fd = 1 (stdout)
lea rsi, [rel msg] ; arg 2: ponteiro para o buffer
mov rdx, len ; arg 3: quantidade de bytes
syscall ; entra no kernel — rcx e r11 são destruídos
mov rax, 60 ; nº da syscall: 60 = exit
xor rdi, rdi ; arg 1: código de saída 0
syscall