ABI

應用程序二進位介面

ABI(Application Binary Interface): 應用程序二進位介面 描述了應用程序和操作系統之間,一個應用和它的庫之間,或者應用的組成部分之間的低介面。

簡介


ABI涵蓋了各種細節,如:
• 數據類型的大小、布局和對齊;
• 調用約定(控制著函數的參數如何傳送以及如何接受返回值),例如,是所有的參數都通過棧傳遞,還是部分參數通過寄存器傳遞;哪個寄存器用於哪個函數參數;通過棧傳遞的第一個函數參數是最先push到棧上還是最後;
• 系統調用的編碼和一個應用如何向操作系統進行系統調用;
• 以及在一個完整的操作系統ABI中,目標文件的二進位格式、程序庫等等。
ABI不同於API ,API定義了源代碼和庫之間的介面,因此同樣的代碼可以在支持這個API的任何系統中編譯,然而ABI允許編譯好的目標代碼在使用兼容ABI的系統中無需改動就能運行。 ABI掩蓋了各種細節,例如:調用約定控制著函數的參數如何傳送以及如何接受返回值;系統調用的編碼和一個應用如何向操作系統進行系統調用;以及在一個完整的操作系統ABI中,對象文件的二進位格式、程序庫等等。一個完整的ABI,像 Intel二進位兼容標準 (iBCS) ,允許支持它的操作系統上的程序不經修改在其他支持此ABI的操作系統上運行。其他的 ABI 標準化細節包括C++ name decoration和同一個平台上的編譯器之間的調用約定,但是不包括跨平台的兼容性。在Unix的操作系統中,存在很多運行在同一件平台上互相相關但是不兼容的操作系統(尤其是80386兼容系統)。有一些努力嘗試標準化A I,以減少銷售商將程序移植到其他系統時所需的工作。然而,直到現在還沒有很成功的例子,雖然LSB正在為Linux做這方面的努力。
它描述了應用程序與OS之間的底層介面。ABI涉及了程序的各個方面,比如:目標文件格式、數據類型、數據對齊、函數調用約定以及函數如何傳遞參數、如何返回值、系統調用號、如何實現系統調用等。
一套完整的ABI(比如:Intel Binary Compatibility Standard (iBCS)),可以讓程序在所有支持該ABI的系統上運行,而無需對程序進行修改。

嵌入式應用二進位介面


嵌入式應用二進位介面 EABI: embedded application binary interface指定了文件格式、數據類型、寄存器使用、堆積組織優化和在一個嵌入式軟體中的參數的標準約定。開發者使用自己的彙編語言也可以使用EABI作為與兼容的編譯器生成的彙編語言的介面。支持EABI的編譯器創建的目標文件可以和使用類似編譯器產生的代碼兼容,這樣允許開發者鏈接一個由不同編譯器產生的庫。EABI與關於通用計算機的ABI的主要區別是應用程序代碼中允許使用特權指令,不需要動態鏈接(有時是禁止的),和更緊湊的堆棧幀組織用來節省內存。廣泛使用EABI的有Power PC和ARM。