我从不清楚什么是ABI。请不要将我指向Wikipedia文章。如果我能理解的话,我就不会在这里发表如此冗长的文章。
这是我对不同接口的看法:
电视遥控器是用户和电视之间的接口。它是一个现有的实体,但是它本身是无用的(不提供任何功能)。电视机上实现了遥控器上每个按钮的所有功能。
接口:是该功能的
functionality
和之间的“现有实体”层consumer
。接口本身不执行任何操作。它只是调用后面的功能。现在,取决于用户是谁,有不同类型的界面。
命令行界面(CLI)命令是现有的实体,使用者是用户,而功能却在后面。
functionality:
我的软件功能可以解决我们描述此界面的某些目的。
existing entities:
命令
consumer:
用户图形用户界面(GUI)窗口,按钮等是现有的实体,而使用者又是用户,功能又在后面。
functionality:
我的软件功能解决了我们描述此接口时遇到的一些问题。
existing entities:
窗口,按钮等。
consumer:
用户应用程序编程接口(API)函数(或更准确地说)(在基于接口的编程中)接口是现有的实体,此处的使用者是另一个程序,而不是用户,并且功能仍在该层后面。
functionality:
我的软件功能解决了我们描述此接口时遇到的一些问题。
existing entities:
函数,接口(函数数组)。
consumer:
另一个程序/应用程序。应用程序二进制接口(ABI)这就是我的问题所在。
functionality:
???
existing entities:
???
consumer:
???
- 我已经用不同的语言编写了软件,并提供了不同种类的界面(CLI,GUI和API),但是我不确定是否提供过任何ABI。
ABI涵盖了诸如
- 数据类型,大小和对齐方式;
- 调用约定,它控制如何传递函数的参数以及如何检索返回的值;
- 系统调用号以及应用程序应如何对操作系统进行系统调用;
其他ABI标准化细节,例如
- C ++名称修改
- 异常传播,以及
- 相同平台上的编译器之间的调用约定,但不需要跨平台兼容性。
谁需要这些细节?请不要说操作系统。我知道汇编编程。我知道链接和加载的工作方式。我确切地知道里面发生了什么。
为什么C ++名称修改出现了?我以为我们在二进制级别上进行讨论。语言为什么会出现?
无论如何,我已经下载了[PDF] System V应用程序二进制接口版本4.1(1997-03-18),以查看其确切包含了什么。好吧,大多数都没有任何意义。
为什么它包含两章(第4和第5章)来描述ELF文件格式?实际上,这些是该规范中仅有的两个重要章节。其余各章是“特定于处理器”的。无论如何,尽管我是一个完全不同的话题。请不要说ELF文件格式规范是 ABI。根据定义,它没有资格成为接口。
我知道,由于我们的讨论水平很低,因此必须非常具体。但是我不确定“指令集体系结构(ISA)”具体如何?
在哪里可以找到Microsoft Windows的ABI?
因此,这些是困扰我的主要查询。