ELF文件类型

一个ELF格式的文件可以为以下几种类型

ET_NONE - 未知类型

ET_REL     - 重定位文件,可重定位目标文件通常是还未被链接到可执行程序的一段位置独立的代码(position independent code)。比如刚编译完的 .o 文件,这种文件包含了创建可执行程序的代码和数据

ET_EXEC  - 可执行文件

ET_DYN   - 共享目标文件,也称动态可链接目标文件或者共享库,会在程序运行时被装载并链接到程序的进程镜像中

ET_CORE - 核心文件,在程序崩溃或者进程传递了 SIGSEGV 信号时,会在核心文件中记录整个进程的镜像信息,可以使用gdb读取这类文件辅助调试并找出崩溃原因

备注:以下默认为 x86-64 小端

使用readelf -h 命令可以查看 elf文件头信息,elf文件头从文件偏移0开始,下面是64位 elf 文件头结构体,总共占用64字节,也就是elf文件的前64个字节存储了下列信息

typedef struct elf_internal_ehdr {
  unsigned char   e_ident[16]; /* ELF "魔术标记" */
  unsigned short  e_type;      /* elf文件类型 */
  unsigned short  e_machine;   /* 机器烈性 */
  unsigned int    e_version;   /* 版本 */
  
  unsigned long    e_entry;  /* 程序入口点 */
  unsigned long    e_phoff;  /* 程序头文件偏移 */
  unsigned long    e_shoff;  /* 节头文件偏移 */
  unsigned int    e_flags;   /* Processor-specific flags */
  
  unsigned short    e_ehsize;     /* ELF 头大小(字节) */

  unsigned short    e_phentsize;  /* 一个程序头大小 */
  unsigned short    e_phnum;      /* 程序头数量 */

  unsigned short    e_shentsize;  /* 一个节头大小 */
  unsigned short    e_shnum;      /* 节头数量 */

  unsigned short    e_shstrndx;   /* 节头字符串表索引 */
} Elf_Internal_Ehdr;
readelf -h a.out
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x400470
  Start of program headers:          64 (bytes into file)
  Start of section headers:          5320 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         9
  Size of section headers:           64 (bytes)
  Number of section headers:         21
  Section header string table index: 18



上一篇: linux二进制相关网站
下一篇: ELF节头
作者邮箱: 203328517@qq.com