Assembly x86-64Instruções
Instruções de sistema
syscall, int, sysret, cpuid, nop…
Instruções
Instruções privilegiadas ou de sistema. A mais importante é syscall, a porta de entrada para o kernel no x86-64 — usada tanto pelo Linux quanto pelos stubs Nt* do Windows.
| Instrução | Operandos | Descrição |
|---|---|---|
| syscall | — | Transição rápida para o kernel (ring 3 → ring 0). Destrói rcx (rip) e r11 (rflags). |
| sysret | — | Retorna do kernel para o modo usuário (o par de syscall). |
| int 0x80 | — | Entrada de syscall legada de 32 bits no Linux; mais lenta que syscall. |
| int n | — | Dispara a interrupção/trap de número n (ex.: int3 = breakpoint). |
| cpuid | — | Consulta os recursos e o modelo do processador. |
| rdtsc | — | Lê o contador de timestamp em edx:eax. |
| nop | — | Não faz nada; usado para alinhamento e padding de código. |
| hlt | — | Para o processador até a próxima interrupção (privilegiado, ring 0). |
a instrução syscall em foco
; a mesma escrita da página de exemplo, com foco no syscall
mov rax, 1 ; nº da syscall: 1 = write
mov rdi, 1 ; fd = stdout
lea rsi, [rel msg] ; ponteiro para o buffer
mov rdx, 3 ; nº de bytes
syscall ; ring 3 -> ring 0; rcx e r11 são destruídos
; rax agora contém o retorno (bytes escritos, ou -errno)