Ceci est un vaste sujet encore vous donner quelques indications:
L'ABI (Application Binary Interface) couvrent les détails qui doivent être spécifiées afin que l'application peut fonctionner sur un certain système (généralement avec un système d'exploitation). Alors, pour se rendre à des exemples:
- tailles de type de données (par exemple la norme C donne des exigences juste minimales pour les types de type int devrait au moins aussi grand que court, court et doit être 16 bits..)
- mise en mémoire des structures et bitfields
- convention d'appel (lorsqu'une fonction est invoquée où il peut trouver ses paramètres, qui dans les registres, qui sur la pile, etc.)
- cadre de pile (ce qu'il est présent sur la pile, utile pour un débogueur)
- numéros d'appel système
- autres
Fondamentalement, aucun détail qui doit être connu afin de construire un programme qui fonctionne en même temps que d'autres composants peuvent être inclus dans un ABI (bibliothèques, OS). Certains ABI spécifient plus et d'autres spécifient moins de détails.
L'architecture matérielle peut également être considérée comme une spécification mais de niveau encore plus bas (il s'agit de matériel et non de logiciel). L'architecture matérielle spécifie des éléments tels que le jeu d'instructions disponible, la hiérarchie de mémoire et la manière d'accéder aux périphériques. Pour une architecture matérielle, il peut y avoir différents ABI. Vous pouvez également avoir le même ABI pour une architecture matérielle multiple (mais généralement similaire).