当前位置: 首页 > news >正文

(转)ABI是什么

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 就是在这个层次上对应用程序的一个规范。

转载于:https://www.cnblogs.com/ziip/archive/2010/08/18/1802207.html

相关文章:

  • 芙蓉姐姐:藕要用光芒四射的才华刺瞎世俗的狗眼!
  • (分享)自己整理的一些简单awk实用语句
  • NeHe OpenGL第四十六课:全屏反走样
  • 超好用的远程协助软件
  • 关于LoadRunner的一点资料
  • css+div学习笔记第1天
  • Linux shell 1
  • 《ASCE1885的信息安全》のWindows下智能卡应用程序的开发(二)
  • 文件夹的隐藏(二)
  • 计划清单
  • INFO:InstallShield中安装路径变量的区别
  • AgileEAS.NET应用开发平台详细使用教程-简单Web应用
  • 百度说吧邀请码
  • 你真的了解分层架构吗?—写给被PetShop......
  • 中秋啊
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Effective Java 笔记(一)
  • export和import的用法总结
  • Intervention/image 图片处理扩展包的安装和使用
  • java正则表式的使用
  • quasar-framework cnodejs社区
  • vue 个人积累(使用工具,组件)
  • Vue学习第二天
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 一起参Ember.js讨论、问答社区。
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用Canvas画一棵二叉树
  • 用element的upload组件实现多图片上传和压缩
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $ git push -u origin master 推送到远程库出错
  • $.ajax()方法详解
  • (70min)字节暑假实习二面(已挂)
  • (8)STL算法之替换
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)windows配置JDK环境
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十六)串口UART
  • (四)图像的%2线性拉伸
  • (一)认识微服务
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net core 6.0 升8.0
  • .Net中ListT 泛型转成DataTable、DataSet
  • .project文件
  • ::前边啥也没有
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @EventListener注解使用说明
  • @ModelAttribute 注解
  • @requestBody写与不写的情况
  • [ C++ ] STL---string类的模拟实现
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ACTF2020 新生赛]Upload 1
  • [CentOs7]iptables防火墙安装与设置
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂