什么是ABI

5 篇文章 0 订阅
3 篇文章 0 订阅
ABI(Application Binary Interface)是CPU指令集、操作系统和二进制文件格式的规范,规定了程序如何被操作系统执行,包括变量管理、函数调用、参数传递等。不同平台如x86_64、ARM等都有各自的ABI标准,这些标准确保了软件的兼容性和可移植性。虽然在现代计算环境中,由于CPU和操作系统的标准化,开发者往往不直接关注ABI,但在底层开发和系统编程中,理解ABI至关重要。
摘要由CSDN通过智能技术生成

复杂度2/5
机密度3/5

最后更新2021/04/24

ABI是Application Binary Interface的缩写。任何写过代码的码农都知道什么是API,这是平台系统为应用程序提供的预先写好的模块,完成一系列的基础功能。那么,如果再深究一下,码农写的程序到底是怎么被执行的呢?虽然说都是一条一条指令,但是这些指令之间最基础的组合关系是如何?是什么样的指令组合使得程序能够实现基础指令集指令之外复杂功能?

例如,CPU指令集里有跳转,有判断,可以完成循环功能;有地址访问,可以完成对变量的读写,对常数的访问;然而,指令集通过什么方案去控制全局变量、局部变量?如何实现子函数之间的调用关系?如何进行调用之间传递参数?等等诸如此类,都需要有一个标准去规范。这个标准就是ABI,ABI是基于CPU硬件指令集,配合操作系统规范,实现用户程序语言转化为二进制代码,能够实际被CPU完美执行。在最初始情况下,ABI甚至规范了操作系统如何能在CPU之上运行的基础。

在比较高层次,ABI也包含二进制可执行文件如何被加载到内存,其内部模块标准等等内容。因此,ABI不但与CPU有关,也与操作系统和二进制可执行程序格式有关。于是,就有了x86_64 ELF ABI, x86 ABI,ARM ABI,PowerPC ELF ABI等等各种组合定义。

确切地说,ABI必须完整包含CPU指令集,OS,二进制文件格式三项内容,但很多时候都省略了其中一项甚至两项定义,而这些省略的项目则与其它参考架构相同或者类似,甚至在此平台是唯一的,没有平行选择,因此可以省略。当前计算机CPU越来越统一到x86架构,操作系统则几乎只有Windows和Linux两个选择,在每种操作系统,Windows是PE(Portable Executable格式,COFF格式的一个变种),Linux是ELF(Executable and Linkable Format),都几乎是唯一选择。尽管其实还有DOS的COM和EXE格式,差不多已经消失在历史长河之中。因此,除了做底层编译环境或者反汇编开发,几乎没有人再关心ABI到底是怎么实现的,有什么选择,而这时候谈到PPC64 ELF ABI,AIX XCOFF ABI反而有点奇怪,我们是考古的,研究的就是古文,把奇怪转变为兴奋吧!点击下载PPC 64 ELF ABI v1.9

由于ABI是程序在被执行的时候,到底发生了什么,我们在以后将详细介绍其过程。目前,只要知道ABI决定了程序能否被当前操作系统执行就可以了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ensighine

如需特定专题,踢我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值