2015-09-27 79 views
-3

的我很迷茫之间的API (应用编程接口)和ABI(应用程序二进制接口)可以解释人我什么是这两个和他们的区别的概念?概念API和ABI

+1

调查维基百科,并回来一个具体的问题。 –

回答

1

API在源代码级别定义模块可以为客户提供的对象和方法。你如何实例化它的对象?你需要传递什么论据给它的方法,它们返回什么?一般来说,当你想知道什么库函数可用以及如何使用它们时,你在问一个API。

ABI是一个较低级别的概念。它定义了模块和客户端之间传递的位和字节。他们在什么格式?他们是否被推入堆栈,通过寄存器,或存储在其他地方?函数返回时是否需要清理堆栈,如果有,谁负责处理呢?

完全愚蠢,但启发性的例子:

考虑一个库函数两个整数相乘:

long long multiply(unsigned int multiplicand, long multiplier); 

它的API指定您有两个参数(一个无符号整数和有符号长叫它整数),并返回一个带符号的双精度长整数。

其ABI可以指定你使用这样的:

  • 推栈上的返回地址作为一个绝对的64位地址,在MSB到LSB顺序。该功能完成后,该程序将继续在该地址执行。
  • 以MSB到LSB的顺序将32位值压入堆栈。它表示无符号被乘数。
  • 在累加器寄存器中存储64位值,按MSB至LSB顺序存储。它代表了二进制补码形式的带符号乘法器。
  • 跳转到相对于程序开头的地址0xADDADD来执行该功能。
  • 完成后,取堆栈中的前4个字节,并在累加器寄存器中追加值的前4个字节,以1的补码格式以LSB到MSB的顺序创建带符号的64位乘积。调用者必须从堆栈中移除4个字节,以及4个字节的被乘数和8个字节的返回地址,以恢复堆栈。

Protip:如果我是你,我会找到另一个数学库。这个太可怕了! :-)