ELF文件格式与相关命令

一、相关概念介绍

  1. 可执行文件(executable)格式:

    windows平台下是PE(protable executable)
    linux平台下是ELF(executable linkable format)
    
  2. 目标文件:
    源代码(.c .cpp)编译之后生成的文件(.o或.obj),从文件结构上讲,它是已经编译后的可执行文件格式,只是没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。它本身是按照可执行文件格式存储的,跟真正的可执行文件在结构上稍有不同,因此目标文件和可执行文件看成是一种文件类型。

  3. 动态链接库(.so .dll)和静态链接库(.a .lib)文件都是按照可执行文件格式存储。

二、ELF文件格式分析:

  • ELF文件格式的种类:

    可重定位文件(relocatable)         .o   .a
    可执行文件(executable)               
    共享目标文件(shared object)       .so 
    核心转储文件                      core dump
    
    file  文件名         该命令可以用来查看文件格式的具体类型。
    

    ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由section header table描述的一系列section的集合,而执行一个ELF文件时,在加载器看来它是由program header table描述的一系列segment的集合。多个源代码编译之后成为多个elf可重定位文件,在链接时将多个elf可重定位文件中对应的section合并组成一个elf可执行文件,每个可执行文件由segment组成。

    本文的讨论基于一个运行linux的x86系统环境,使用标准ELF文件格式。讨论集中在32位代码,在x86-64系统上用gcc -m32产生32位代码。
    若编译时发生/usr/include/features.h:364:25: fatal error: sys/cdefs.h: 没有那个文件或目录,则使用命令sudo apt-get install libc6-dev-i386解决。

  • ELF可重定位文件详解:

    可重定位文件图解

    相关术语的说明:
    ELF可执行文件大体按照图中的形式组织,不同的是在ELF可重定位文件中的内容称为节(section),对应的有section header table。在ELF可执行文件中的内容称为段(segment),对应的有program header table。可重定位文件中的节(section)在链接时对应节进行合并生成可执行文件中的段(segment)。

    实例代码与简化的可重定位文件的对应

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值