Søknad binært grensesnitt - Application binary interface
I dataprogramvare er et applikasjons binært grensesnitt ( ABI ) et grensesnitt mellom to binære programmoduler. Ofte er en av disse modulene et bibliotek eller operativsystem , og den andre er et program som kjøres av en bruker.
En ABI definerer hvordan datastrukturer eller beregningsrutiner er tilgjengelig i maskinkode , som er et maskinvareavhengig format på lavt nivå. Derimot definerer et API denne tilgangen i kildekoden , som er et relativt høyt nivå, maskinvareuavhengig, ofte lesbart format. Et vanlig aspekt ved et ABI er oppringningskonvensjonen , som bestemmer hvordan data leveres som inndata til eller leses som utdata fra beregningsrutiner. Eksempler på dette er x86 -samtalekonvensjonene .
Å følge en ABI (som kanskje er offisielt standardisert eller ikke) er vanligvis jobben til en kompilator , operativsystem eller biblioteksforfatter. Imidlertid kan en applikasjonsprogrammerer måtte forholde seg til en ABI direkte når han skriver et program på en blanding av programmeringsspråk, eller til og med kompilerer et program skrevet på samme språk med forskjellige kompilatorer.
Beskrivelse
ABIs dekker detaljer som:
- et prosessorinstruksjonssett (med detaljer som registerfilstruktur, stabelorganisasjon, minnetilgangstyper, ...)
- størrelser, oppsett og justeringer av grunnleggende datatyper som prosessoren har direkte tilgang til
- den ringer konvensjonen , som kontrollerer hvordan argumentene til funksjoner er gått, og returnere verdier hentet. For eksempel kontrollerer den:
- om alle parametere sendes på stakken, eller noen blir sendt i registre;
- hvilke registre som brukes for hvilke funksjonsparametere;
- og om den første funksjonsparameteren som sendes på stakken skyves først eller sist.
- hvordan en applikasjon skal foreta systemanrop til operativsystemet, og hvis ABI spesifiserer direkte systemanrop i stedet for prosedyreanrop til systemanropsstubber, ringer systemnumrene .
- og når det gjelder et komplett operativsystem ABI, det binære formatet til objektfiler , programbiblioteker og så videre.
Komplette ABIer
Et komplett ABI, for eksempel Intel Binary Compatibility Standard (iBCS), tillater et program fra ett operativsystem som støtter at ABI kan kjøres uten modifikasjoner på andre slike systemer, forutsatt at nødvendige delte biblioteker er tilstede og lignende forutsetninger er oppfylt.
Andre ABIer standardiserer detaljer, for eksempel manglende C ++ -navn , forplantning av unntak og samtaler mellom kompilatorer på samme plattform, men krever ikke kompatibilitet på tvers av plattformer.
Innebygde ABI -er
Et innebygd applikasjons binært grensesnitt (EABI) spesifiserer standardkonvensjoner for filformater , datatyper, registerbruk, stabelrammeorganisasjon og funksjonparameteroverføring av et innebygd programvare, for bruk med et innebygd operativsystem .
Kompilatorer som støtter EABI lager objektkode som er kompatibel med kode generert av andre slike kompilatorer, slik at utviklere kan koble biblioteker generert med en kompilator med objektkode generert med en annen kompilator. Utviklere som skriver sin egen samlingsspråkkode , kan også grensesnittet med montering generert av en kompatibel kompilator.
EABI -er er designet for å optimalisere for ytelse innenfor de begrensede ressursene til et innebygd system. Derfor utelater EABI -er de fleste abstraksjoner som er gjort mellom kjernen og brukerkoden i komplekse operativsystemer. For eksempel kan dynamisk kobling unngås for å tillate mindre kjørbare filer og raskere lasting, fast registerbruk tillater mer kompakte stabler og kjerneanrop, og kjøring av applikasjonen i privilegert modus gir direkte tilgang til tilpasset maskinvaredrift uten å måtte ringe en enhetsdriver. Valget av EABI kan påvirke ytelsen.
Mye brukte EABI -er inkluderer PowerPC , Arm EABI og MIPS EABI. Spesifikke programvareimplementeringer som C -biblioteket kan pålegge ytterligere begrensninger for å danne mer konkrete ABI -er; ett eksempel er GNU OABI og EABI for ARM, som begge er delsett av ARM EABI.
Se også
Referanser
Eksterne linker
- Retningslinjer/problemer med binær kompatibilitet med C ++ - et kompendium av tommelfingerregler for å ikke bryte binær kompatibilitet mellom bibliotekutgivelser
- OS X ABI -funksjon Anropsguide
- Debian ARM EABI -port
- μClib: Motorola 8/16-biters innebygd ABI
- AMD64 (x86-64) binært grensesnitt for applikasjoner på Wayback-maskinen (arkivert 2008-05-28)
- Application Binary Interface (ABI) for ARM Architecture
- MIPS EABI dokumentasjon
- Sun Studio 10-kompilatorer og AMD64 ABI på Wayback Machine (arkivert 2015-01-14)-en oppsummering og sammenligning av noen populære ABI-er
- M • CORE Applications Binary Interface Standards Manual for Freescale M · CORE -prosessorene