What is an application binary interface (ABI)?

Eu nunca entendi claramente o que é uma ABI. Por favor, não me aponte para um artigo da Wikipedia. Se eu pudesse entender, não estaria aqui postando uma postagem tão longa.

Esta é a minha mentalidade sobre diferentes interfaces:

Um controle remoto da TV é uma interface entre o usuário e a TV. É uma entidade existente, mas inútil (não fornece nenhuma funcionalidade) por si só. Toda a funcionalidade de cada um desses botões no controle remoto é implementada no aparelho de televisão.

Interface: É uma camada de "entidade existente" entre ofunctionality econsumer dessa funcionalidade. Uma interface por si só não faz nada. Apenas invoca a funcionalidade por trás.

Agora, dependendo de quem é o usuário, existem diferentes tipos de interfaces.

Interface da Linha de Comandos (CLI) Os comandos são as entidades existentes, o consumidor é o usuário e a funcionalidade está por trás.

functionality: minha funcionalidade de software que resolve algum objetivo para o qual estamos descrevendo essa interface.

existing entities: comandos

consumer: do utilizador

Interface gráfica do usuário (GUI) janela, botões etc. são as entidades existentes e, novamente, o consumidor é o usuário e a funcionalidade está por trás.

functionality: minha funcionalidade de software que resolve algum problema para o qual estamos descrevendo essa interface.

existing entities: janela, botões etc.

consumer: do utilizador

Interface de programação de aplicativos (API) interfaces de funções (ou, para ser mais correto) (na programação baseada em interface) são as entidades existentes, o consumidor aqui é outro programa e não um usuário, e novamente a funcionalidade está por trás dessa camada.

functionality: minha funcionalidade de software que resolve algum problema para o qual estamos descrevendo essa interface.

existing entities: funções, interfaces (matriz de funções).

consumer: outro programa / aplicativo.

Interface Binária de Aplicativo (ABI) Aqui é onde meu problema começa.

functionality: ???

existing entities: ???

consumer: ???

Escrevi software em idiomas diferentes e forneci diferentes tipos de interfaces (CLI, GUI e API), mas não tenho certeza se já forneci alguma ABI.

A Wikipedia diz:

As ABIs abrangem detalhes como

tipo de dados, tamanho e alinhamento;a convenção de chamada, que controla como os argumentos das funções são passados e retornam os valores recuperados;os números de chamada do sistema e como um aplicativo deve fazer chamadas para o sistema operacional;

Outras ABIs padronizam detalhes como

o nome C ++ desconfigurado,propagação de exceção econvenção de chamada entre compiladores na mesma plataforma, mas não requer compatibilidade entre plataformas.

Quem precisa desses detalhes? Por favor, não diga o sistema operacional. Eu sei programação de montagem. Eu sei como funciona o link e o carregamento. Eu sei exatamente o que acontece por dentro.

Por que o nome C ++ mutilado apareceu? Eu pensei que estávamos falando no nível binário. Por que os idiomas entram?

De qualquer forma, eu baixei o[PDF] Interface binária do aplicativo System VEdição 4.1 (18-03 1997) para ver exatamente o que ele contém. Bem, a maior parte não fazia sentido.

Por que contém dois capítulos (4 e 5) para descrever oDUENDE formato de arquivo? De fato, esses são os únicos dois capítulos significativos dessa especificação. O restante dos capítulos é "específico do processador". Enfim, eu acho que é um tópico completamente diferente. Por favor, não diga que as especificações de formato de arquivo ELFestão o ABI. Não se qualifica para ser uminterface de acordo com a definição.

Eu sei, já que estamos falando em um nível tão baixo, deve ser muito específico. Mas não tenho certeza de como é específica a "arquitetura do conjunto de instruções (ISA)"?

Onde posso encontrar a ABI do Microsoft Windows?

Então, essas são as principais consultas que estão me incomodando.

questionAnswers(15)

yourAnswerToTheQuestion