2011-01-27 15 views
18

To co wikipedia mówi:Co to jest ABI (interfejs binarny aplikacji)?

W oprogramowania komputerowego, aplikacji binarny Interface (ABI) opisuje interfejs niskopoziomowe między aplikacji (lub dowolnego rodzaju) programu i systemu operacyjnego lub inna aplikacja .

ABI obejmują szczegóły, takie jak typ danych, rozmiar i wyrównanie; konwencja wywołująca, która steruje argumentami funkcji funkcji i zwraca zwrócone wartości; numery połączeń systemowych oraz sposób, w jaki aplikacja powinna wykonywać wywołania systemowe do systemu operacyjnego ; aw przypadku kompletnego systemu operacyjnego ABI , binarny format plików obiektowych, bibliotek programu i tak dalej. Kompletny ABI, takich jak Intel binarnej kompatybilności Standard (IBC), umożliwia program z jednego systemu operacyjnego wspierającego że ABI, aby uruchomić bez modyfikacji na dowolnym innym takim systemem, pod warunkiem że niezbędne biblioteki współdzielone są obecny, i podobne wymagania są spełnione: .

Chyba że ABI jest Konwencja lub standard, i kompilatory/łączniki użyć tej konwencji do produkcji kodów obiektów. Czy to prawda? Jeśli tak, kto stworzył te konwencje (firmy lub jakąś organizację)? Jak to było, kiedy nie było ABI? Czy istnieją dokumenty dotyczące tych ABI, do których możemy się odnosić?

+7

Zobacz http://stackoverflow.com/questions/2171177/i-never-really-understood- what-is-ap-ication-binary-interface-abi – Simone

Odpowiedz

12

Masz rację co do definicji ABI, do pewnego momentu. Klasycznym przykładem jest interfejs syscall w systemie Linux (i innych systemach UNIX).

Są one standardowym sposobem kodowania, aby zażądać od systemu operacyjnego wykonywania pewnych obowiązków.

Jako takie, decydują o tym ludzie, którzy napisali system operacyjny lub, w przypadku, gdy dodano później syscalls, przez każdego, kto je dodał (w przypadkach, gdy system operacyjny na to pozwala). Na przykład, interfejs Linux na platformie x86 syscall stwierdza, że ​​włożysz numer syscall do eax, a pozostałe parametry umieszczone w ebx, ecx i tak dalej, w zależności od syscall Robisz (eax).

Zwykle nie jest to kompilator lub linker, który wykonuje pracę interfejsu, a raczej biblioteki przewidziane dla używanego języka.

Wracając do Linuksa, biblioteki GNU C zawierają kod fopen (na przykład), który ostatecznie wywołać odpowiednią syscall do wykonywania zadań niższych poziomów (numer funkcji 5, open). Listę syscalls można znaleźć w this PDF file.

+0

Nie sądzę, że jest to system operacyjny, który definiuje ABI, Myślę, że to architektura maszyny, która definiuje swój własny specyficzny ABI, popraw mnie, jeśli się mylę. – AnkitSablok

+1

@Ankit, architektura maszyny może ograniczyć możliwe metody, ale wybór jest dokonywany przez system operacyjny. Zastanówmy się na przykład, w jaki sposób sysenter i int80 robią wywołania systemu Linux na x86. Można również użyć zmiennych stosu lub stałych adresów pamięci, aby przekazać parametry, zamiast używać rejestrów. – paxdiablo

+0

Architektura maszyny ma tylko kontrolę nad tym, jak metody są wywoływane przez jądro, ich liczba jest zależna od jądra systemu operacyjnego dla tej architektury – AnkitSablok

4

Specyfikacja jest terminem bardziej odpowiednim niż konwencja, ponieważ konwencja jest luźnym terminem dla powszechnie akceptowanej praktyki, a specyfikacja jest dobrze zdefiniowana.

Masz rację. Specyfikację sporządza organ standaryzacyjny.Zapoznaj się ze specyfikacją POSIX obsługiwaną przez system Windows i kompilatorami/narzędziami do tworzenia kompilacji, takimi jak gcc, z założeniem, że system operacyjny jest zgodny z nią, a nawet jądro Linuxa (prawie dokładnie) jest z nim zgodne.

Przed ABI? Nawet dzisiaj oprogramowanie układowe jest ręcznie tworzone w miarę pojawiania się nowych układów dla dekoderów i innych urządzeń z wbudowanymi systemami.

Dokumentacja jest cyfrowej treści logicznej w arkuszu danych dla chipów, które mają być programowane przez język asemblerowy i dla języka wyższego poziomu, cross-kompilator dokumentacji łańcucha narzędzi zdradza założenia, które powinny być częścią ABI.

2

Cóż, koncepcja ABI została prawdopodobnie pomyślana jako wsparcie dla binarnej kompatybilności twojego programu z innymi systemami operacyjnymi i architekturami maszyn. Załóżmy więc, że napisałeś program na temat dystrybucji systemu operacyjnego działającej na architekturze x86. Teraz dla programisty najważniejsze jest to, że ten program, który napisałeś na swoim komputerze, powinien być w stanie uruchomić dokładnie to samo na każdej innej maszynie działającej na tej samej lub innej architekturze, powiedzmy, ze względu na dyskusję, że druga maszyna działa na architekturze i386 i tu pojawia się koncepcja ABI lub interfejsów binarnych aplikacji. Ponieważ każda architektura komputera definiuje własny sposób, w jaki system operacyjny kernal rozmawia ze światem zewnętrznym, tj. programy przestrzeni użytkownika, stąd każda architektura definiuje inny zestaw wywołań systemowych, rejestrów maszynowych, sposobu korzystania z rejestrów, obsługi przerwań oprogramowania przez kernala i tak dalej. ABI to rzecz, która zajmuje się tymi rzeczami jak kompilowanie, łączenie, porządkowanie bajtów i tak dalej. Programiści systemowi mieli trudności w zdefiniowaniu jednolitego ABI dla tych samych systemów operacyjnych działających na różnych architekturach i dlatego każda architektura maszyny ma własną architekturę i musisz skompilować swoje programy, aby potwierdzić format tych maszyn.