A sua pergunta abrange vários tópicos, tentarei abordar todos eles.
-
Não tenho certeza se há um termo canônico único para a maneira como as chamadas do sistema são invocadas, ainda menos para uma maneira específica em que as chamadas do sistema são chamadas (interrupção 0x80 em vez de
SYSENTER
ouSYSCALL
). Em x86-64, a interface de chamada do sistema documentada , usandoSYSCALL
, é descrita na ABI System V x86-64, mas é apenas informativa, não normativa. Da mesma forma, enquanto a maioria das pessoas entenderia o que você estava falando se você se referisse a ele como “i386 Linux kernel ABI” (substituindo “i386” pela arquitetura que você está falando), isso poderia ser confuso também desde “kernel ABI” tem outro significado (no contexto dos módulos do kernel), e novamente não está limitado a interrupção 0x80.Na prática, a maioria das pessoas não deve se preocupar com os detalhes até este nível de detalhe, especialmente porque eles podem evoluir: interrupção 0x80,
SYSCALL
etc. como você menciona, mas também o vDSO que introduz suas próprias sutilezas e é o ponto de entrada preferido para todas as chamadas do sistema no x86 hoje em dia ... Claro que isso não significa que não pode haver um termo para se referir a uma convenção de chamada específica, mas não tenho certeza de que seria tudo isso útil. -
O Windows também suporta o uso de uma interrupção para sua interface de chamada de sistema, 0x2E, mas sua “convenção de chamada” é : argumentos são colocados na pilha, a chamada do sistema solicitada é fornecida pela EAX e EBX. aponta para os argumentos na pilha.
-
Os kernels x86 atuais definem a interface de chamada do sistema em
arch/x86/entry
:entry_32.S
contém a interface i386,entry_64.S
a interface x86-32 e x86-64,entry_64_compat.S
a interface x86-64 de 32 bits (para retrocompatibilidade),syscalls/syscall_32.tbl
a tabela de chamadas do sistema i386 ,syscalls/syscall_64.tbl
a tabela de chamadas do sistema x86-32 e x86-64.Os comentários nesses arquivos documentam a interface, em particular como os argumentos são passados: para chamadas de 32 bits, o EAX contém o número de chamada do sistema e seus parâmetros são colocados em EBX, ECX, EDX, ESI, EDI e EBP. (o próprio parâmetro para
SYSENTER
, um ponteiro para a pilha de usuários contendo o parâmetro para a interrupção 0x80); para chamadas de 64 bits, o RAX contém o número de chamada do sistema e seus parâmetros são colocados em RDI, RSI, RDX, R10, R8 e R9 (consulte também Por que a chamada do sistema registrou e ordenou a mudança de Intel 32bit para 64bit? ). Há um bom resumo com diagramas emcalling.h
.
Como uma observação, as comparações históricas geralmente se referem à interface de chamada do MS-DOS, que usava principalmente interrupção 0x21 ; ele também incluía a interrupção multiplex, 0x2F , que fornecia um mecanismo extensível para adicionar serviços do sistema (geralmente envolvendo TSRs; os drivers de dispositivo usavam principalmente uma interface diferente).