Nigdy nie zrozumiałem jasno, czym jest ABI. Proszę nie kierować mnie do artykułu w Wikipedii. Gdybym mógł to zrozumieć, nie byłoby mnie tutaj, publikującego tak długi post.
Oto moje zdanie na temat różnych interfejsów:
Pilot do telewizora to interfejs między użytkownikiem a telewizorem. Jest istniejącym bytem, ale sam w sobie jest bezużyteczny (nie zapewnia żadnej funkcjonalności). Wszystkie funkcje każdego z tych przycisków na pilocie są zaimplementowane w telewizorze.
Interfejs: Jest to „istniejący podmiot” warstwa pomiędzy
functionality
iconsumer
tej funkcjonalności. Sam interfejs nic nie robi. Po prostu przywołuje funkcjonalność.Teraz w zależności od tego, kim jest użytkownik, istnieją różne typy interfejsów.
Komendy interfejsu wiersza poleceń (CLI) to istniejące podmioty, konsument to użytkownik, a za nimi stoi funkcjonalność.
functionality:
moja funkcjonalność oprogramowania, która rozwiązuje jakiś cel, dla którego opisujemy ten interfejs.
existing entities:
polecenia
consumer:
użytkownikOkno graficznego interfejsu użytkownika (GUI) , przyciski itp. Są istniejącymi jednostkami, a konsument jest użytkownikiem, a funkcjonalność pozostaje w tyle.
functionality:
moja funkcjonalność oprogramowania, która rozwiązuje pewien problem, dla którego opisujemy ten interfejs.
existing entities:
okno, przyciski itp.
consumer:
użytkownikFunkcje interfejsu programowania aplikacji (a ściślej mówiąc) interfejsy (w programowaniu opartym na interfejsie) są istniejącymi jednostkami, tutaj konsumentem jest inny program, a nie użytkownik, i za tą warstwą znów stoi funkcjonalność.
functionality:
moja funkcjonalność oprogramowania, która rozwiązuje pewien problem, dla którego opisujemy ten interfejs.
existing entities:
funkcje, interfejsy (tablica funkcji).
consumer:
inny program / aplikacja.Application Binary Interface (ABI) Tutaj zaczyna się mój problem.
functionality:
???
existing entities:
???
consumer:
???
- Napisałem oprogramowanie w różnych językach i zapewniłem różnego rodzaju interfejsy (CLI, GUI i API), ale nie jestem pewien, czy kiedykolwiek dostarczyłem jakieś ABI.
ABI obejmują takie szczegóły, jak
- typ danych, rozmiar i wyrównanie;
- konwencja wywoływania, która kontroluje sposób przekazywania argumentów funkcji i pobierania wartości zwracanych;
- numery wywołań systemowych i sposób, w jaki aplikacja powinna nawiązywać połączenia systemowe z systemem operacyjnym;
Inne ABI standaryzują szczegóły, takie jak
- mangling nazwy C ++,
- propagacja wyjątków oraz
- konwencja wywoływania między kompilatorami na tej samej platformie, ale nie wymagają one zgodności między platformami.
Kto potrzebuje tych informacji? Proszę nie mówić o systemie operacyjnym. Znam programowanie asemblacyjne. Wiem, jak działa łączenie i ładowanie. Wiem dokładnie, co dzieje się w środku.
Dlaczego pojawiło się zniekształcanie nazw w C ++? Myślałem, że rozmawiamy na poziomie binarnym. Dlaczego przychodzą języki?
W każdym razie pobrałem [PDF] System V Application Binary Interface Edition 4.1 (1997-03-18), aby zobaczyć, co dokładnie zawiera. Cóż, większość z nich nie miała sensu.
Dlaczego zawiera dwa rozdziały (czwarty i piąty) opisujące format pliku ELF ? W rzeczywistości są to jedyne dwa znaczące rozdziały tej specyfikacji. Pozostałe rozdziały dotyczą „procesora”. W każdym razie myślałem, że to zupełnie inny temat. Nie mów, że specyfikacje formatu plików ELF to ABI. Zgodnie z definicją nie kwalifikuje się jako interfejs .
Wiem, skoro rozmawiamy na tak niskim poziomie, musi to być bardzo konkretne. Ale nie jestem pewien, w jaki sposób jest on specyficzny dla architektury „zestawu instrukcji (ISA)”?
Gdzie mogę znaleźć ABI Microsoft Windows?
Oto główne pytania, które mnie denerwują.