程序的链接和装载(3)--目标文件(.o/.obj)

本文详细介绍了目标文件的格式,包括Windows的PE和Linux的ELF,以及目标文件在Linux下的段组成,如.data、.rodata、.bss等。此外,还提及了自定义段、ELF头、段表、重定位表、字符串表和符号表等关键概念,为深入理解程序的链接和装载奠定基础。
摘要由CSDN通过智能技术生成

我们经过编译的目标文件,里面到底存放的内容是什么呢?其实,目标文件本身已经是编译后的可执行文件了,只是还没有经过链接,所以内部很多符号还没有分配地址。其实目标文件本身就是按照可执行文件的格式进行存储的,只是目标文件和可执行文件在文件结构上略微有些区别。

    1.目标文件的格式

    目前主流的pc平台所流行的可执行文件格式主要分为两种,一种是Windows下的PE(Portable Executable),另一种是Linux下的ELF(Executable Linkable Format),它们都是COFF(Common File Format)的变种。广义上来看,目标文件,动态库文件和可执行文件其实都是同样按照可执行文件的格式存储的。

    以Linux平台为例,我们可以看到目标文件,动态库文件,可执行文件的文件格式都为ELF文件,区别在于目标文件是Relocatable,动态库文件是Shared object,可执行文件是Executable。

    目标文件(MBB_PUSCH_FDP_Task.o)

     动态库文件(libfft.so)

     可执行文件 (ls)

    ELF文件标准里把系统中采用ELF格式的文件归为4类,分别是:

    (1)可重定位文件(Relocatable): 这类文件包含了代码和数据,可以被用来链接成可执行文件或者共享库文件。

    (2)可执行文件(Executable): 这类文件包含了可以直接执行的程序。

    (3)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值