BLOG

Record, summarize, and improve.

ABI

计算机软件中,应用程序二进制接口ABI ) 是两个二进制程序模块之间的接口。通常,这些模块之一是操作系统设施,另一个是用户正在运行的程序。

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

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

ABI 涵盖的详细信息包括以下内容:

  • 处理器指令集,包括寄存器文件结构、堆栈组织、内存访问类型等细节。
  • 处理器可以直接访问的基本数据类型的大小、布局和对齐方式
  • 调用约定函数,它控制参数的传递方式和返回值的检索方式;例如,它控制以下内容:
    • 是所有参数都在栈上传递,还是部分参数在寄存器中传递
    • 哪些寄存器用于哪些函数参数
    • 传入栈的第一个函数参数是先入栈还是后入栈
  • 应用程序应如何对操作系统进行系统调用,如果 ABI 指定直接系统调用而不是对系统调用存根的过程调用,则系统调用号
  • 在一个完整的操作系统 ABI 的情况下,目标文件、程序库等的二进制格式。