这是维基百科所说的:
在计算机软件中,应用程序二进制接口 (ABI) 描述了应用程序(或任何类型的)程序与操作系统或另一个应用程序之间的低级接口。
ABI 涵盖数据类型、大小和对齐方式等细节;调用约定,它控制函数的参数如何传递和返回值的检索;系统调用号以及应用程序应如何对操作系统进行系统调用;而在完整的操作系统ABI的情况下,目标文件、程序库等的二进制格式。一个完整的 ABI,例如英特尔二进制兼容性标准 (iBCS),允许来自一个支持该 ABI 的操作系统的程序无需修改即可在任何其他此类系统上运行,前提是存在必要的共享库并满足类似的先决条件。
我猜 ABI 是一种约定或标准,编译器/链接器使用此约定来生成目标代码。那正确吗?如果是这样,谁制定了这些约定(公司或某些组织)?没有 ABI 的时候是什么样的?是否有关于这些 ABI 的文档可供我们参考?