Sobre este projeto

Esta é uma versão modernizada da clássica tabela de syscalls do Linux x86_64 de Robert Chapman — mantendo o espírito de referência técnica direta, mas com busca instantânea, documentação por chamada e um catálogo equivalente para a Win32 API do Windows.

Fontes

Tabela numérica do Linux x86_64

Extraída diretamente de arch/x86/entry/syscalls/syscall_64.tbl do código-fonte do kernel Linux (ABIs common e 64 — a ABI x32, legada e de escopo estreito, foi deixada de fora). Os 385 números e nomes desta referência foram verificados programaticamente contra essa tabela, garantindo correspondência exata.

Documentação de cada syscall

Escrita com base nas man-pages da seção 2 (System Calls), no comportamento documentado do kernel, e em notas de versão do kernel para destacar chamadas deprecadas ou com comportamento incomum.

Win32 API

Baseada na documentação pública da Microsoft (Microsoft Learn / Win32 API reference) para as 229 funções curadas nesta referência.

Por que o Windows não tem números de syscall?

No Linux, o número de uma syscall (o valor colocado em rax antes da instrução syscall) é parte estável da ABI: uma vez atribuído, um número nunca muda entre versões do kernel. Isso é documentado publicamente e garantido pela política de estabilidade da interface do kernel.

O Windows funciona de forma fundamentalmente diferente. As funções da Native API (as funções Nt*/Zw* expostas por ntdll.dll, que por sua vez emitem a instrução syscall/sysenter para o kernel) têm números de syscall internos — mas a Microsoft nunca os documentou oficialmente, e eles mudam a cada build do Windows, às vezes até entre atualizações menores. Descobri-los exige engenharia reversa, mantida por projetos da comunidade como as tabelas de syscall do j00ru e o Vergilius Project.

Por isso, esta referência documenta o Windows pelo nome estável da Win32 API (a camada que aplicações realmente usam, em kernel32.dll, advapi32.dll, ws2_32.dll, etc.), citando o nome da função Native API subjacente quando relevante — mas nunca um número, que estaria desatualizado antes mesmo de ser publicado.

Escopo do catálogo Windows

A Win32 API tem milhares de funções, incluindo subsistemas inteiros como GDI, COM e a API de janelas (User32). Um catálogo exaustivo estaria fora do espírito de referência direta desta ferramenta. As 229 funções aqui foram escolhidas por espelharem as categorias do lado Linux — arquivos, processos/threads, memória, registro, rede, sincronização, IPC, segurança, serviços, dispositivos, informações de sistema e tempo — priorizando as chamadas mais fundamentais e mais consultadas de cada área.

Registradores no Linux x86_64

Cada página de syscall mostra o mapeamento para os registradores rdi, rsi, rdx, r10, r8, r9 (argumentos 1–6) e rax (número da chamada / valor de retorno). Repare que o quarto argumento usa r10, não rcx como a convenção de chamada C padrão (System V AMD64 ABI) usaria — a instrução syscall sobrescreve rcx (endereço de retorno) e r11 (flags), então o kernel substitui rcx por r10 nesse ponto de entrada. Os wrappers de syscall da glibc fazem essa troca de forma transparente.

Equivalências entre plataformas

Os links de “equivalente em…” são aproximações funcionais, não mapeamentos 1:1 — os dois sistemas operacionais modelam processos, memória e E/S de formas diferentes o suficiente para que uma única syscall corresponda a uma combinação de chamadas Win32 (ou a nenhuma). Onde o mapeamento é impreciso, uma nota explica a diferença.

Atualidade dos dados

A tabela de syscalls Linux reflete o código-fonte do kernel no momento em que esta referência foi construída, incluindo adições recentes como listns e rseq_slice_yield. Novas syscalls continuam sendo adicionadas a cada versão do kernel — consulte sempre arch/x86/entry/syscalls/syscall_64.tbl no kernel que você está usando para a fonte definitiva.

Encontrou uma imprecisão? Esta é uma referência viva — dados de sistemas operacionais mudam. Volte para a página inicial ou explore Linux e Windows.