Voltar à lista
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