linux中ELF格式文件介绍

2017-04-19  本文已影响0人  DecadeHeart

ELF格式即可执行连接文件格式,是一种比较复杂的文件格式。但应用广泛,和其他可执行文件(a.out,cof)相比,它对节的定义和gnu工具链对它的支持使它十分灵活,它保存的足够的系统相关信息使它能够支持不同平台上的交叉编译和交叉链接
ELF格式文件的分类,组成,作用,以及其中包含的内容,常用的elf操作工具

格式:是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)


(1)文件头还包含了ELF头的大小,文件类型(可重定位,可执行和共享),机器类型,节头表的位置和大小。节头表中的每一项对应于文件中的一个节,用于描述节的位置和大小。
(2)一个典型的重定位目标文件包含下面的节:
.text:机器代码
.rodata:只读数据,例如printf的字符串常量参数,jump跳转表。
.data:已初始化的全局c变量,本地c变量在运行程序的栈中。
.bss:未初始化的全局变量,这个节在文件中并不占实际的空间
.symtab:符号表,包含了本模块定义和引用的全局符号信息,不包含局部变量的信息。
.rel.text:.text节中需要重定位的信息。一般,任何调用外部函数或者引用全局变量的值是一个全局变量地址或外部函数地址的情况下需要重新修改这个值,但是,如果指令调用本地函数,则不需要被修改,重定位信息在可执行文件中可以不需要。
.rel.data:重定位任何被这个模块定义和引用的全局变量信息。通常在一个全局变量的值是另一个全局变量地址或者外部函数地址的情况下需要重新修改中这个值。
.debug:包含调试信息
.line:在.text节中的机器指令与原始c代码所在行之间的映射
.strtab:在.symatab和.debug节中所用的字符串表

上一篇 下一篇

猜你喜欢

热点阅读