Je n'ai jamais clairement compris ce qu'est un ABI. Veuillez ne pas me diriger vers un article Wikipedia. Si je pouvais comprendre, je ne serais pas ici pour publier un article aussi long.
C'est mon état d'esprit sur les différentes interfaces:
Une télécommande TV est une interface entre l'utilisateur et le téléviseur. C'est une entité existante, mais inutile (ne fournit aucune fonctionnalité) par elle-même. Toutes les fonctionnalités de chacun de ces boutons de la télécommande sont implémentées dans le téléviseur.
Interface: Il s'agit d'une couche "entité existante" entre le
functionality
etconsumer
de cette fonctionnalité. Une interface seule ne fait rien. Il invoque simplement la fonctionnalité qui se trouve derrière.Maintenant, selon qui est l'utilisateur, il existe différents types d'interfaces.
Les commandes CLI (Interface de ligne de commande) sont les entités existantes, le consommateur est l'utilisateur et la fonctionnalité est derrière.
functionality:
ma fonctionnalité logicielle qui résout un objectif auquel nous décrivons cette interface.
existing entities:
commandes
consumer:
utilisateurLa fenêtre de l' interface utilisateur graphique (GUI) , les boutons, etc. sont les entités existantes, et encore une fois le consommateur est l'utilisateur et la fonctionnalité est derrière.
functionality:
ma fonctionnalité logicielle qui résout un problème auquel nous décrivons cette interface.
existing entities:
fenêtre, boutons etc.
consumer:
utilisateurLes fonctions d'interface de programmation d'application (API) (ou, pour être plus correct), les interfaces (dans la programmation basée sur l'interface) sont les entités existantes, le consommateur est un autre programme et non un utilisateur, et là encore, la fonctionnalité se trouve derrière cette couche.
functionality:
ma fonctionnalité logicielle qui résout un problème auquel nous décrivons cette interface.
existing entities:
fonctions, Interfaces (tableau de fonctions).
consumer:
un autre programme / application.Interface binaire d'application (ABI) Voici où commence mon problème.
functionality:
???
existing entities:
???
consumer:
???
- J'ai écrit des logiciels dans différentes langues et fourni différents types d'interfaces (CLI, GUI et API), mais je ne sais pas si j'ai déjà fourni une ABI.
Les ABI couvrent des détails tels que
- type, taille et alignement des données;
- la convention d'appel, qui contrôle la façon dont les arguments des fonctions sont passés et les valeurs de retour récupérées;
- les numéros d'appel système et comment une application doit effectuer des appels système vers le système d'exploitation;
D'autres ABI standardisent des détails tels que
- le changement de nom C ++,
- propagation d'exception, et
- convention d'appel entre compilateurs sur la même plate-forme, mais ne nécessite pas de compatibilité entre plates-formes.
Qui a besoin de ces détails? Veuillez ne pas dire le système d'exploitation. Je connais la programmation d'assemblage. Je sais comment fonctionne le lien et le chargement. Je sais exactement ce qui se passe à l'intérieur.
Pourquoi le changement de nom C ++ est-il entré? Je pensais que nous parlons au niveau binaire. Pourquoi les langues entrent-elles?
Quoi qu'il en soit, j'ai téléchargé [PDF] System V Application Binary Interface Edition 4.1 (1997-03-18) pour voir ce qu'il contient exactement. Eh bien, la plupart n'avaient aucun sens.
Pourquoi contient-il deux chapitres (4e et 5e) pour décrire le format de fichier ELF ? En fait, ce sont les deux seuls chapitres importants de cette spécification. Les autres chapitres sont "spécifiques au processeur". Quoi qu'il en soit, je pensais que c'était un sujet complètement différent. Veuillez ne pas dire que les spécifications du format de fichier ELF sont l'ABI. Il ne remplit pas les conditions requises pour être une interface selon la définition.
Je sais, puisque nous parlons à un niveau aussi bas, cela doit être très précis. Mais je ne sais pas en quoi est-ce que "l'architecture de jeu d'instructions (ISA)" est spécifique?
Où puis-je trouver l'ABI de Microsoft Windows?
Ce sont donc les principales requêtes qui me dérangent.