关于elf的一些记录

1 篇文章 0 订阅
1 篇文章 0 订阅

###最近在学习free bsd 的一些相关的知识,看到可执行文件的时候看不明白 elf 和 abi 了,所以就google了下。看到了些英文的资料。就此整理一下吧

1. 所谓的elf,英文全称(Executable and Linkedable Format),就是目标文件(object file)的一种格式。(还有coff、a.out,目前linux和现代的unix都是基于elf的,老一代的可能是基于a.out或者ecoff等等)

2. elf是为 可行行文件、目标文件、链接库、以及 core dumps等所设计的通用标准格式。

3. elf是平台无关的,并且是可拓展和压缩的(fixible and extensible).并且该标准是可以被任何平台所实现的。  

###每一个遵循elf标准的文件可有两部分组成

1. elf header  

2. file data  

####file data可以含有如下的一项或者几项

1. 用于描述0个或者多个段(segment)的program header table

2. 用于描述0个或者多个sections的 section header table

3. 在program header table 和 section header table 中指定的相关的数据  

#####section header table

section header table描述了文件运行期间的必须要的一些信息,例如链接、relocation、之类的信息。整个文件的每一个byte最多可以关联一个section,也就是说,可能存在的孤儿byte(即没有关联section的byte)

###接下来说一些关于ABI的东东

所谓ABI:就是应用二进制接口的缩写(application binary interface)

ABIs:指定了一些的详细的东西,比如

1. 数据类型、大小和对齐

2. 函数的调用规则(call convention)、比如函数参数以及返回值在哪里去获取、参数如何取得、调用者和被调用者之间如何设置(setting up)和料理后事(clean up),还有同步之类的一些事儿

3. 系统调用数量、以及程序如何调用系统调用

4. 采用什么样的二进制格式,比如elf等等  

###abi和api

好吧,我承认我觉得读者可能会混淆两者。

是这样的,abi是针对目标文件的,api是针对源代码(如果你知道了api就能写代码,知道了abi却不能,就这样。)

可以把abi当作二进制调用的规则的描述,而api是源代码级别的函数的调用规则的描述。

这样应该好理解了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值