什么是ABI(应用程序二进制接口)?

时间:2011-01-27 10:06:34

标签: terminology abi

这是维基百科所说的:

  

在计算机软件中,一个应用程序   二进制接口(ABI)描述了   一个低级别的接口   应用程序(或任何类型的)程序   和操作系统或其他   应用

     

ABI涵盖数据类型等详细信息,   大小和对齐;呼唤   惯例,控制如何   函数的参数传递和   检索返回值;系统   电话号码以及如何申请   应该进行系统调用   操作系统;在一个案例中   完整的操作系统ABI ,.   二进制格式的目标文件,程序   图书馆等。一个完整的ABI,   例如英特尔二进制兼容性   标准(iBCS)允许程序   从一个操作系统支持   ABI无需修改即可运行   在任何其他此类系统上提供   必要的共享库是   现在和类似的先决条件是   满足。

我猜ABI是一种约定或标准,编译器/链接器使用此约定来生成目标代码。是对的吗?如果是这样,谁制定了这些约定(公司或某个组织)?什么时候没有ABI?我们可以参考哪些关于这些ABI的文件?

2 个答案:

答案 0 :(得分:12)

你对ABI的定义是正确的,直到某一点。典型的例子是Linux(和其他UNIX)中的syscall接口。

它们是代码请求操作系统执行某些职责的标准方法。

因此,它们是由编写OS的人决定的,或者在稍后添加syscalls的情况下由添加它们的人决定(在操作系统允许的情况下)。例如,x86上的Linux syscall接口声明您将syscall号加载到eax,其他参数放在ebxecx等等,取决于您所做的syscalleax)。

通常情况下,不是编译器或链接器进行接口工作,而是为您正在使用的语言提供的库。

返回Linux,GNU C库包含fopen的代码(例如),最终调用相关的syscall来执行较低级别的任务(系统调用号5,open) 。可以在this PDF file中找到syscalls的列表。

答案 1 :(得分:4)

规范是比惯例更合适的术语,因为惯例是广泛接受的惯例的松散术语,而规范是明确定义的。

你是对的。规范由标准化机构制定。看一下Windows支持的POSIX规范和编译器/构建工具链,例如gcc假设操作系统要遵守它,甚至Linux内核部分(几乎完全)遵守它。

在ABI之前?即使在今天,固件也是手工制作的,因为新的芯片出现在机顶盒和其他具有嵌入式系统的设备中。

文档是数据表中的数字逻辑内容,用于通过汇编语言编写的芯片,对于更高级别的语言,交叉编译器工具链文档提供了应该成为ABI一部分的假设。 / p>

相关问题