一,简介
一般gcc编译生成的文件是可执行文件,一般我们称为目标文件,目标文件在linux上是一个ELF(Executable and Linkable Format)文件。一个文件是否ELF文件可以通过file命令查看,包括是否32bit/64bit,以及类型。
ELF文件由四种类型,可重定位文件(Relocatable)、可执行文件(Executable)、共享文件库(shared Object)、核心转储文件(core dump).
编译阶段生成的*.o文件是可重定位文件,链接后生成的是可执行文件或者共享库。
目标文件内容肯定是机器指令、数据、链接时需要的信息(如符号表),这些数据以section的形式存储。
二、ELF文件结构
ELF Header:开头即ELF字符,7f 45 4c,还有文件类型、大小以及加载后的程序执行的入口点信息等,readelf-h读取
Progrem Header table:程序头表,readelf -l 读取,可执行文件的数据在进程虚拟地址空间组织方式信息,以及文件包含的段数据、各段位置和用途
各种section:section一般称为节
Section header table:各个section的信息,如名称、长度、偏移、读写权限等,可通过readelf -