Ich habe nie klar verstanden, was ein ABI ist. Bitte verweisen Sie mich nicht auf einen Wikipedia-Artikel. Wenn ich es verstehen könnte, wäre ich nicht hier, um einen so langen Beitrag zu veröffentlichen.
Dies ist meine Einstellung zu verschiedenen Schnittstellen:
Eine TV-Fernbedienung ist eine Schnittstelle zwischen dem Benutzer und dem Fernseher. Es ist eine vorhandene Entität, aber für sich genommen nutzlos (bietet keine Funktionalität). Alle Funktionen für jede dieser Tasten auf der Fernbedienung sind im Fernsehgerät implementiert.
Schnittstelle: Es handelt sich um eine "vorhandene Entität" zwischen der
functionality
undconsumer
dieser Funktionalität. Eine Schnittstelle an sich macht nichts. Es ruft nur die dahinter liegende Funktionalität auf.Je nachdem, wer der Benutzer ist, gibt es nun verschiedene Arten von Schnittstellen.
CLI- Befehle (Command Line Interface) sind die vorhandenen Entitäten, der Verbraucher ist der Benutzer und die Funktionalität steckt dahinter.
functionality:
meine Softwarefunktionalität, die einen Zweck löst, für den wir diese Schnittstelle beschreiben.
existing entities:
Befehle
consumer:
BenutzerFenster, Schaltflächen usw. der grafischen Benutzeroberfläche (GUI) sind die vorhandenen Entitäten, und wiederum ist der Verbraucher der Benutzer, und die Funktionalität liegt dahinter.
functionality:
meine Softwarefunktionalität, die ein Problem löst, für das wir diese Schnittstelle beschreiben.
existing entities:
Fenster, Knöpfe etc ..
consumer:
BenutzerAPI- Funktionen ( Application Programming Interface) (oder genauer gesagt) Schnittstellen (bei der Schnittstellenprogrammierung) sind die vorhandenen Entitäten, der Verbraucher ist hier ein anderes Programm, kein Benutzer, und wiederum liegt die Funktionalität hinter dieser Schicht.
functionality:
meine Softwarefunktionalität, die ein Problem löst, für das wir diese Schnittstelle beschreiben.
existing entities:
Funktionen, Schnittstellen (Array von Funktionen).
consumer:
ein anderes Programm / eine andere Anwendung.Application Binary Interface (ABI) Hier beginnt mein Problem.
functionality:
???
existing entities:
???
consumer:
???
- Ich habe Software in verschiedenen Sprachen geschrieben und verschiedene Arten von Schnittstellen (CLI, GUI und API) bereitgestellt, bin mir aber nicht sicher, ob ich jemals ein ABI bereitgestellt habe.
ABIs decken Details wie
- Datentyp, Größe und Ausrichtung;
- die aufrufende Konvention, die steuert, wie die Argumente von Funktionen übergeben und Rückgabewerte abgerufen werden;
- die Systemrufnummern und wie eine Anwendung Systemaufrufe an das Betriebssystem tätigen soll;
Andere ABIs standardisieren Details wie
- der C ++ Name Mangling,
- Ausnahmeverbreitung und
- Aufrufkonvention zwischen Compilern auf derselben Plattform, jedoch keine plattformübergreifende Kompatibilität erforderlich.
Wer braucht diese Details? Bitte sagen Sie nicht das Betriebssystem. Ich kenne Assembler-Programmierung. Ich weiß, wie das Verknüpfen und Laden funktioniert. Ich weiß genau, was drinnen passiert.
Warum kam C ++ Name Mangling ins Spiel? Ich dachte, wir reden auf binärer Ebene. Warum kommen Sprachen herein?
Wie auch immer, ich habe die [PDF] System V Application Binary Interface Edition 4.1 (1997-03-18) heruntergeladen, um zu sehen, was genau sie enthält. Nun, das meiste ergab keinen Sinn.
Warum enthält es zwei Kapitel (4. und 5.), um das ELF- Dateiformat zu beschreiben ? Tatsächlich sind dies die einzigen zwei wesentlichen Kapitel dieser Spezifikation. Der Rest der Kapitel ist "prozessorspezifisch". Jedenfalls denke ich, dass es ein ganz anderes Thema ist. Bitte sagen Sie nicht , dass ELF - Dateiformat - Spezifikationen sind die ABI. Es ist keine Schnittstelle gemäß der Definition.
Ich weiß, da wir auf so niedrigem Niveau sprechen, muss es sehr spezifisch sein. Aber ich bin nicht sicher, wie es "Befehlssatzarchitektur (ISA)" spezifisch ist?
Wo finde ich das ABI von Microsoft Windows?
Das sind also die Hauptfragen, die mich nerven.