在軟體開發中,应用二进制接口(英語:application binary interface,縮寫為ABI)是指兩程式模組間的接口;通常其中一個程式模組會是函式庫或作業系統所提供的服務,而另一邊的模組則是使用者所執行的程式。

一個ABI定義了機器碼如何存取資料結構與運算程序,此處所定義的界面相當低階並且相依於硬體。而類似概念的API則在原始碼定義這些,則較為高階,並不直接相依於硬體,通常會是人類可閱讀的程式碼。一個ABI常見的樣貌即是調用約定:資料怎麼成為計算程序的輸入或者從中得到輸出;x86的調用約定即是一個ABI的例子。

決定要不要採取既定的ABI(不論是否由官方提供),通常由編譯器,作業系統或函式庫的開發者來決定;然而,如果撰寫一個混和多個程式語言的應用程式,就必須直接處理ABI,採用外界函数接口英语Foreign function interface來達成此目的。

描述

编辑

ABI涵盖了各种细节,如:

  • 数据类型的大小、布局和对齐;
  • 调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数是最先push到栈上还是最后;
  • 系统调用的编码和一个应用如何向操作系统进行系统调用;
  • 以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。

一个完整的ABI,像Intel二进制兼容标准英语Intel Binary Compatibility Standard(iBCS)[1],允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作系统上运行。

其他的ABI标准化了一些细节,包括C++名字修饰[2],和同一个平台上的编译器之间的调用约定[3],但是不包括跨平台的兼容性。

ABI不同于应用编程接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。 在Unix风格的操作系统中,存在很多运行在同一硬件平台上互相相关但是不兼容的操作系统(尤其是Intel 80386兼容系统)。有一些努力尝试标准化ABI,以减少销售商将程序移植到其他系统时所需的工作。然而,直到现在还没有很成功的例子,虽然Linux标准化工作组正在为Linux做这方面的努力。

EABI

编辑

嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用EABI作为与兼容的编译器生成的汇编语言的接口。 支持EABI的编译器创建的目标文件可以和使用类似编译器产生的代码兼容,这样允许开发者链接一个由不同编译器产生的库。EABI与关于通用计算机的ABI的主要区别是应用程序代码中允许使用特权指令,不需要动态链接(有时是禁止的),和更紧凑的堆栈帧组织用来节省内存。[4] 广泛使用EABI的有Power PC[5]ARM.[6][7]

参见

编辑

参考资料

编辑
  1. ^ Intel Binary Compatibility Standard (iBCS). [2011-01-19]. (原始内容存档于2012-05-27). 
  2. ^ Itanium C++ ABI 互联网档案馆存檔,存档日期2008-11-19. (compatible with multiple architectures)
  3. ^ Itanium C++ ABI: Exception Handling 互联网档案馆存檔,存档日期2008-05-11. (compatible with multiple architectures)
  4. ^ EABI Summary. PowerPC Embedded Application Binary Interface: 32-Bit Implementation (PDF) Version 1.0. Freescale Semiconductor, Inc. 1995-10-01: 28–30 [2011-01-19]. (原始内容存档 (PDF)于2012-03-16). 
  5. ^ "PowerPC Embedded Processors Application Note"[永久失效連結]
  6. ^ Debian ARM accelerates via EABI port. Linuxdevices.com. 2007-01-19 [2007-10-11]. (原始内容存档于2012-07-14). 
  7. ^ Andrés Calderón and Nelson Castillo. Why ARM's EABI matters. Linuxdevices.com. 2007-03-14 [2007-10-11]. (原始内容存档于2012-07-14). 

外部链接

编辑

📚 Artikel Terkait di Wikipedia

可執行與可鏈接格式

Supplement PowerPC Embedded Application Binary Interface32-Bit Implementation​(1995年10月1日) 64-bit PowerPC ELF Application Binary Interface Supplement1.9版​(2004年)

ABI

InBev),一家比利時-巴西的跨國飲料與釀造公司 Applied Biosystems,一家美国生物技术公司 应用二进制接口(Application binary interface),一種低級別的計算機編口 AbiWord,一個免費和開源的文書處理軟體 踝肱指數(Ankle-brachial index),小腿相對於上臂的血壓比值

X32 ABI

Linux主题 x32 ABI(英語:x32 Application Binary Interface)是一种ABI及Linux内核接口之一。它允许程序得到x86-64的优点(较大的CPU寄存器号码,更佳的浮点性能,更快的地址无关代码共享库,通过寄存器传递函数参数,更快的系统调用指令),而使用32位指针,从而避免了对64位指针的开销。

虛擬化

Application Programming Interface)來設計,使用動態連結的方式用於隱藏作業系統的細節,目的是提供程式設計師更簡單的工作。這也產生了一種新的虛擬化方式,使用不同的API與不同作業系統底層的ABI(Application Binary Interface)來進行模擬的工作。

Visual C++名字修饰

C++ Compiler(ICC)与Digital Mars C++,都与Visual C++保持了二进制兼容(Application Binary Interface, ABI)。而Linux平台上的Intel C++ Compiler(ICC)与HP aC++,都与GCC 3.x/4

Cell (微處理器)

Cell 獨立浮點數運算單元 SPU 的指令集架構,低階組合語言,高階 C/C++ 程式語言擴充規格,以及應用程式二進位介面(Application Binary Interface)的規格書與說明文件。 Cell結合了通用的Power Architecture內核,適中的性能與流線型的協處理器,大大加

无线二进制运行环境

client),大約佔用150K左右的記憶體空間,介於應用程式軟體和底層系統軟體(Application Specific Integrated Circuit,ASIC)之間。因此,開發廠商可以於不相關裝置電路(device's chipset)或無線介面(air interface)的情況下,獨立開發BREW應用程式。CDMA(Code

組建自動化

组建自动化(英語:Build automation,又称构建自动化、自动化构建、構建系統)指自动创建软件组建的一组进程,包括将计算机源代码编译成二进制码(英语:binary code)、將二进制码包装成软件包以及运行自动化测试。 组建自动化原先是通过创建makefile来完成的,如今则主要使用两大类工具完成组建: