ABI API

  • ABI (Application Binary interface): 二进制接口
  • API(Application programming interface):应用程序接口

ABI

目标文件格式(Linux: ELF, windows: PE)、符号修饰标准、变量内存分布/对齐方式、函数调用方式等这些跟二进制可执行代码兼容性相关的内容称为ABI。

ABI(Application Binary Interface)为应用程序二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的二进制层面的底层接口。影响ABI的因素非常多,硬件、编程语言、编译器、链接器、操作系统等都会影响ABI。

  • name mangling(名字重整): 也称为 名字修饰(name decoration),当你通过API调用库里的一个函数,此时会去查找函数符号表,函数符号表会对函数名进行名字修饰,如C++允许重载,即两个函数可以同名但不同参数,所以要把参数信息一起编码进去才能进行查找,这个就是name mangling。该修饰规则由编译器实现,如果规则不一致,认为ABI不兼容,从而导致查找失败。
  • calling convention(调用约定): 是指当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数返回值是怎么传递和由谁平衡堆栈的。
    简单理解函数的调用

查看动态库.so的编译器信息:

$ strings libc10.so | grep GCC
GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
_Unwind_Resume@@GCC_3.0
GCC_3.0

细谈ABI (Application Binary interface)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值