ELF文件格式

elf即可执行可链接格式,分为三种类型:可执行文件(.exec)、可重定位文件(.rel)、共享目标文件(.dyn):
可执行文件:经过链接的、可执行的目标文件,通常也被成为程序。
可重定位文件:由源文件编译而成且尚未链接的目标文件,通常以.o作为拓展名。用于与其他目标文件进行链接以构成可执行文件或动态链接库,通常是一段位置独立的代码
共享目标文件:动态链接库文件。用于在链接过程中与其他动态链接库或可重定位文件一起构建新的目标文件,或者在可执行文件加载时,链接到进程中作为运行代码的一部分。
核心转储文件作为进程意外终止时进程地址空间的转储,也是elf文件的一种。使用gdb读取这类文件可以辅助调试和查找程序崩溃的原因。
ELF文件的结构
在审视一个目标文件时,有两种视角,一种是链接视角,通过节来进行划分;另一种是运行视角,通过段进行划分。
先讲链接视角:通常目标文件都会包含代码(.text)、数据(.data)、和BSS(.bss)三个节。其中代码节用于保存可执行的机器指令,数据节用于保存已初始化的全局变量和局部变量,BSS节则用于保存未初始化的全局变量和局部静态变量。除了这三个节之外还有一个文件头.
ELF文件头
位于目标文件最开始的位置,包含描述整个文件的一些基本信息。文件头部存在魔术字符(7f 45 4c 46),即字符串"\177ELF",当文件被映射到内存时,可以通过搜索该字符确定映射地址,这在dump内存时非常有用。在这里插入图片描述
符号表:记录了目标文件中所用到的所有符号信息,通常分为.dynsym和.symtab,前者是后者的子集。.dynsym保存了引用自外部文件的符号,只能在运行时被解析,而.symtab还保存了本地符号,用于调试和链接。目标文件通过一个符号在表中的索引值来使用该符号。索引值从0开始计数,但值为0的表项不具有实际意义,它表示未定义的符号。每个符号都有一个符号值,对于变量和函数,该值就是符号的地址。
重定位是链接符号定义与符号引用的过程。可重定位文件在构建可执行文件或共享目标文件时,需要把节中的符号引用换成这些符号在进程空间中的虚拟地址。包含这些转换信息的数据就是重定位项。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值