ABI 是系统与应用之间的协议. 一个BINARY(EXEC, LIB)必需符合ABI才能在相应的系统上运行.
比如我在PC上用不管什么样的COMPILER, 只要产生符合LINUX的ELF文件, 用相应的INSTRUCTION SET(比如INTEL, PPC, SPARC). 就可以在一个LINUX机器上运行. 调用系统或别人的LIB.
ABI定义了BINARY的文件格式, 内容, 以及装载/卸载程序的要求, 函数调用的参数传递规则, 寄存器, 堆栈的使用等.

abi(应用二进制接口)我的理解就是机器代码一层的接口。先说一下api(特指系统调用),
api基本上是和机器硬件平台无关但是和操作系统密切相关的接口,一个api调用定义了一个对内核的操作,以及操作的参数。C语言会议函数的形式调用 api。
   
    abi,是比api更贴近硬件的一层接口,它规定的是二进制代码之间的调用规则。举个例子来说吧!
一个应用程序,调用了.so库中的函数或者系统调用,如果它的编译器可以找到被调用函数或者系统
调用的话,则编译可以同过,也就是说,它是用的api是正确的。但是,这个调用离成功还很远。。。。。
   
    首先,如果编译出来的代码和运行库函数和系统调用的代码不是一个硬件平台的,则这个应用根本就不能和被调用代码运行在一起,则调用不会成功。
   
    即使库函数、系统调用和是运行在同一硬件平台上的调用也不一定会趁成功。因为程序最终是被编译成二进制代码的,并且是要加载到内存中运行的。那么,在调用 库函数或者系统调用的时候,应用要先要以库函数或者系统调用指定的方式和位置(内存或者寄存器)设置参数,然后通过中断或者其他方式跳转到被调用代码的起 始处进行执行,被调用代码从指定位置去到参数,处理完毕之后再将结果放到指定的位置,最后应用再到指定的地方取回结果,调用完毕!

我认为这个过程中,存放参数和结果的位置属于abi规定的范围,被调用程序的跳转地址或者中断号码也是abi规定的范围。如果存取参数、结果的位置没有明 确的规范,或者调用、被调用双方没有遵照统一个规范,那么这个调用能够根本就不可能成功;如果系统提供的库函数路径不正确,调用也不会成功;如果中断代码 使用错误,调用也不会正确。abi 就是在这个层次上对应用程序的一个规范。

ABI(Application Binary Interface)相关推荐

  1. ABI (Application Binary Interface)解析

    应用程序二进制接口ABI (Application Binary Interface)是一套规则,规定了二进制可执行文件在运行时应如何与某些服务(诸如内核或函数库所提供的服务)交换信息.ABI特别规定 ...

  2. API(Application Programming Interface,应用程序编程接口)

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码 ...

  3. DAPI(Distributed Application Program Interface)

    DAPI 最近在做区块链平台,发现需要定一个API接口实现对去快乐的访问,而区块链是一个分布式系统,对其的调用有两种常见方式: 构建一个独立的同步节点,和区块链保持同步,通过节点API实现区块链的访问 ...

  4. API(Application Programming Interface)

    API(Application Programming Interface) 文章目录 API(Application Programming Interface) 一.API概述 二.Object类 ...

  5. 安卓操作系统版本(Version)与应用程序编程接口等级(Application Programming Interface Level)对照表...

    Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑. 使用Android API,可以在Java环境开发App,编译.打包后可在Android系统 ...

  6. ABI and ISA

    ABI定义了如何使用ISA. ISA定义了机器码的使用规则. http://www.delorie.com/gnu/docs/gmp/gmp_6.html ABI and ISA ABI (Appli ...

  7. 初识ELF格式 ABI,EABI,OABI

    尽管每天都在调用linux的elf文件做各种事,但却很少去了解他,最近尝试在orangepi上编译个elf到android手机上运行,因为两个CPU都是ARMv8的.结果运行失败了.遂查找原因.结果挖 ...

  8. ABI稳定对于Swift意味着什么?

    早在2018年9月,Apple公司的Swift 开发团队在官网更新了 "Swift 5.0 Release Process" ,主要介绍 Swift 5.0 的开发目标.发布流程和 ...

  9. ABI接口与API接口

    API和ABI很类似,两者的全程只有一字之隔,API(Application Programming Interface)和ABI(Application Binary Interface),其实 两 ...

最新文章

  1. ubuntu如何修改字符集编码
  2. logstic 回归
  3. 传统的http请求存在那些缺点
  4. 启动设备ar1失败 错误代码2_设备启动系列(2)寿力空压机
  5. 485转换器产品功能特点及技术参数介绍
  6. 【学习笔记】深入理解js原型和闭包(11)——执行上下文栈
  7. 【程序设计】函数参数
  8. 计算机和口腔医学都不错的学校,人民日报推荐“各省”好大学,并非只有985/211,普本也有好大学...
  9. 住170平以上的大平层大户型什么感觉?
  10. HDU5447 Good Numbers
  11. java理论知识看了忘_Java基础知识点总结--从细节再看Java(一)
  12. office 2019中文
  13. MPS | 聊聊功率因数校正那些事儿
  14. python计算实例_python实例: 税率计算
  15. 4872: [Shoi2017]分手是祝愿
  16. 普通学校,我是该打ACM还是做项目?
  17. 数据治理:元数据及元数据管理策略、方法和技术
  18. infer.net 入门2 用一个侦探故事来讲解,通俗易懂
  19. yolov5的detect.py代码详解
  20. day11-函数作业

热门文章

  1. Ajax中有关readyState(状态值)和status(状态码)的问题
  2. 获得指定时间所在月份的天数
  3. 点击关闭按钮时缩小到系统任务栏
  4. 熟悉使用ssm框架完成项目
  5. iptables 防火墙(上)
  6. JavaScript 对引擎、运行时、调用堆栈的概述理解
  7. 配置IISExpress允许外部访问
  8. html5--7-33 阶段练习5
  9. srm#397_div1_500pt 矩阵乘法+快速模幂
  10. select下拉框美化