應用二進制介面
佇軟體開發中,應用兩進位的介面(英語:application binary interface,縮寫為ABI)是講兩程式模組間的介面;通常其中一个程式模組會是函式庫抑是作業系統所提供的服務,啊若另外一爿的模組是使用者所執行的程式。
一个 ABI 定義矣機器碼按怎存取資料結構佮運算程式,現在所定義的介面相當低階並且佮硬體無相𫝛。這種概念的 API 是佇原始去看遮的,著愛較高階,並無直接依照硬體,通常會是人類是閱讀的程式碼。一个 ABI 捷看的情形就是調用品定:資料欲按怎成做計算程式的輸入或者是對內底得著輸出;x 八十六的調用約定即是一个 ABI 的例。
決定無欲採取既定的 ABI(無論是毋是有官方提供), 通常由編譯器,作業系統抑是函式庫的開發者來決定;毋過,若是編寫一个混和濟程式語言的應用程式,著愛直接處理 ABI,採用外部函式呼叫來達成此目的。
是咧講
ABI 涵蓋各種的細節,如:
- 資料類型的蓋大細、布局和對齊;
- 呼喝約束(控制著函式的參數按怎傳送以及如何接受返回值), 比如講,是所有的參數攏通過棧傳達,抑是部分參數通過暫存器傳達;佗一个暫存器用於佗一个函式參數;通過棧傳達的第一个函式參數是代先 push 到棧頂抑是到尾仔;
- 系統呼叫的編碼佮一个應用按怎向作業系統進行系統呼叫;
- 猶閣有佇咧一个完整的作業系統 ABI 中,目的檔的二進位格式、程式庫等等。
一个完整的 ABI,像 Intel 兩進位相容標準(iBCS), 允准支援伊的作業系統上的程式無經修改佇咧其他支持 ABI 的作業系統上執行。
其他的 ABI 標準化一寡細節,包括講 C + + 名修削,和同一个平台頂的編譯器之間的呼叫約定,但是無包括平台的相容性。
ABI 佮應用程式無仝應用(API), API 定義矣原始碼佮庫之間的介面,按呢仝款的代碼會當共咱鬥支援這个 API 彼个任何系統內底編譯,毋過 ABI 允准編譯好的目的碼咧使用相容 ABI 的系統當中無需要改動就會當執行。 佇咧 Unix 風格的作業系統當中,存在真濟執行佇仝一硬體平台頂互相關但是無相容的作業系統(尤其是 Intel 八堵空三百八十六相容系統)。 有一寡拍拚咧試標準化 ABI,以減少銷售商共程式徙到其他的系統時所需要的工課。毋過,到這馬猶無真成功的例,雖然 Linux 標準化工作群組當咧為 Linux 做這方面的努力。
EABI
1875入式來應用兩進位的介面指定矣檔案格式、資料類型、暫存器使用、堆積組織最佳化佮佇一个1875入式的軟體中的參數的標準約定。開發者使用家己的組合語言嘛會使使用 EABI 成做佮相容的編譯器生成的組合語言的介面。 支援 EABI 的編譯器建立的目的檔會當佮使用類似編譯器產生的代碼相容,按呢允准開發者連結一个由無仝編譯器產生的庫。EABI 佮關於著通用電腦的 ABI 的主要區別是應用程式代碼中允准使用特權指令,敢有需要動態連結(有當時仔是禁止的), 閣較緊鬥的疊框組織用來節省記持體。 廣泛使用 EABI 的有 Power PC 和 ARM .
參見
- Application programming interface-API
- 程式設計
- 系統呼叫
參考資料
外部連結
- KDE Techbase Policies-Good compendium of development rules of thumb ( with some examples ) for not breaking binary compatibility between releases of your library .
- Mac OS X ABI Function Call Guide
- Debian ARM EABI port
- µClib : Motorola 十六分之八-bit embedded ABI
- AMD 六十四 ( x 八十六陵六十四 ) Application Binary Interface
- Application Binary Interface ( ABI ) for the ARM Architecture
- MIPS EABI documentation
- Sun Studio 十 Compilers and the AMD 六十四 ABI-Good summary and comparison about some popular ABIs
- " M ・ CORE Applications Binary Interface Standards Manual " for the Freescale M ・ CORE processors