首页 / 科技 / 正文

abi应用程序二进制接口

放大字体  缩小字体 2024-12-04 17:44  浏览次数:19

两个程序单元之间的二进制接口


内核API、内核-用户空间API和ABIs的高级比较Linux内核和GNU C库定义了Linux API。编译之后,二进制文件提供一个ABI。保持这个ABI长期稳定是im isv的创造。

在计算机软件中,应用程序二进制接口(ABI)是两个二进制程序模块之间的接口。通常,其中一个模块是库或操作系统工具,而另一个模块是由用户运行的程序。

ABI定义了如何在机器代码中访问数据结构或计算例程,这是一种低级的、依赖于硬件的格式。相反,API在源代码中定义这种访问,这是一种相对高级的、与硬件无关的、通常是人类可读的格式。ABI的一个常见方面是调用约定,它决定如何将数据作为输入提供给计算例程,或从计算例程中读取数据作为输出。这方面的例子是x86调用约定。

遵循ABI(可能是正式标准化的,也可能不是)通常是编译器、操作系统或库作者的工作。然而,应用程序程序员在使用混合编程语言编写程序时,甚至在使用不同编译器编译用同一语言编写的程序时,可能不得不直接处理ABI。


ABIs包括以下细节:

  • 应用程序应该如何对操作系统进行系统调用,如果ABI指定对系统调用存根的直接系统调用而不是过程调用,则系统调用编号。

  • 在完整操作系统ABI的情况下,是目标文件、程序库等的二进制格式。

  • 完整的abi

    一个完整的ABI,比如Intel二进制兼容性标准(iBCS),允许来自一个支持该ABI的操作系统的程序在任何其他这样的系统上运行,只要存在必要的共享库,并且满足类似的先决条件。

    其他abi标准化了c++名称混乱、异常传播和同一平台上编译器之间的调用约定等细节,但不要求跨平台兼容性。

    嵌入式abi

    嵌入式应用程序二进制接口(EABI)指定用于嵌入式操作系统的文件格式、数据类型、寄存器使用、堆栈框架组织和函数参数传递的标准约定。

    支持EABI的编译器创建的目标代码与其他此类编译器生成的代码兼容,允许开发人员将一个编译器生成的库与另一个编译器生成的目标代码链接起来。编写自己的汇编语言代码的开发人员也可以与兼容编译器生成的汇编进行接口。

    EABIs的设计目的是在嵌入式系统的有限资源内优化性能。因此,EABIs省略了复杂操作系统中内核和用户代码之间的大多数抽象。例如,为了允许更小的可执行程序和更快的加载,可以避免动态链接;固定寄存器的使用允许更紧凑的堆栈和内核调用;以特权模式运行应用程序允许直接访问自定义硬件操作,而不间接调用设备驱动程序。EABI的选择会影响性能。

    广泛使用的EABI包括PowerPC、Arm EABI和MIPS EABI。特定的软件实现,比如C库,可能会施加额外的限制来形成更具体的abi;一个例子是针对ARM的GNU OABI和EABI,它们都是ARM EABI的子集。


热门视频
精彩图片
友情链接
声明:本站信息均由用户注册后自行发布,本站不承担任何法律责任。如有侵权请告知立立即做删除处理。
违法不良信息举报邮箱:3217462938
头条快讯网 版权所有 黔ICP备2021009996号
中国互联网举报中心