
eu acabei de lerum exemploda ABI. Está correto isso
uma ABI é semelhante à API, exceto que a ABI está em linguagem de máquina e a API está em uma linguagem de programação de alto nível
uma ABI é a interface fornecida e pertencente a uma biblioteca compilada em linguagem de máquina? (Se eu estiver correto, uma biblioteca compilada feita por você mesmo fornece sua ABI (veja o exemplo acima). Um sistema operacional pode ser visto como uma biblioteca compilada e, portanto, fornece sua própria ABI para aplicativos acessarem seus serviços de chamada de sistema.)
O exemplo acima não menciona se uma ABI de uma biblioteca compilada feita por você mesmo depende do sistema operacional.
https://en.wikipedia.org/wiki/Application_binary_interfacemenciona o sistema operacional no entanto:
ABIs cobrem detalhes como:
um conjunto de instruções do processador (com detalhes como estrutura do arquivo de registro, organização da pilha, tipos de acesso à memória, ...)
os tamanhos, layouts e alinhamentos de tipos de dados básicos que o processador pode acessar diretamente
a convenção de chamada, que controla como os argumentos das funções são passados e os valores de retorno são recuperados; por exemplo, se todos os parâmetros são passados na pilha ou alguns são passados em registradores, quais registradores são usados para quais parâmetros de função e se o primeiro parâmetro de função passado na pilha é colocado primeiro ou por último na pilha
como um aplicativo deve fazer chamadas de sistema parao sistema operacionale, se a ABI especificar chamadas diretas do sistema em vez de chamadas de procedimento para stubs de chamada do sistema, os números de chamada do sistema
e no caso de um sistema operacional completo ABI, o formato binário de arquivos objeto, bibliotecas de programas e assim por diante.
A ABI de uma biblioteca compilada depende do sistema operacional? (Acho que não. Mesmo que uma biblioteca compilada use serviços de chamada do sistema por meio da ABI do sistema operacional, é a biblioteca compilada e não sua ABI que depende (da ABI do) sistema operacional.)
A ABI de uma biblioteca compilada pode ser independente (da ABI do) sistema operacional?
Obrigado.
Responder1
A ABI de uma biblioteca compilada depende de seu destino e não precisa incluir um sistema operacional. Existem bibliotecas para sistemas embarcados sem sistema operacional e existem bibliotecas para plataformas como Java que abstraem a ABI do sistema operacional.
Como você disse, a ABI do sistema operacional determina como uma biblioteca (ou programa) o chama; não determina necessariamente como a biblioteca é chamada. O que determina a ABI de uma biblioteca é realmente sua API junto com as especificações do compilador que ela usa. O compilador normalmente seguirá a ABI da plataforma de destino, mas isso não é específico do sistema operacional; por exemplo, no Linux, a plataforma ABI éo Sistema V ELF ABI, com suplementos de processador específicos de arquitetura.
No entanto, é possível que a ABI de um sistema operacional vaze para a ABI de uma biblioteca, por exemplo, se a biblioteca expõe diretamente estruturas específicas do sistema em sua ABI.