linux 解析elf文件格式,Linux下ELF文件解析

1. windows PE文件与Linux ELF文件概述

在windows中可执行文件是pe文件格式,Linux中可执行文件是ELF文件,其文件格式是ELF文件格式,在Linux下的ELF文件除了可执行文件(Excutable File),可重定位目标文件(RellocatableObject File)、共享目标文件(SharedObject File)、核心转储文件(CoreDump File)也都是ELF格式文件。

2.ELF文件结构分析

2.1 ELF文件查看

使用Linux下专用工具——readelf来查看elf文件信息

linux 解析elf文件格式,Linux下ELF文件解析_第1张图片

查看readelf中的源码

bd185ba19ee23c08723f7db97cb5a96c.png

一个典型的ELF文件大致的结构如下:

ELF文件大致的结构文件头(ELF Header)

程序头表(Program Header Table)

代码段(.text)

数据段(.data)

bss段(.bss)

段表字符串表(.shstrtab)

段表(Section Header Table)

符号表(.symtab)

字符串表(.strtab)

重定位表(.rel.text)

重定位表(.rel.data)

2.2 FLF文件组成

2.2.1文件头

用于记录一个ELF文件的信息(多少位?能够运行的CPU平台是什么?程序的入口点在哪里)

查看ELF头

linux 解析elf文件格式,Linux下ELF文件解析_第2张图片

在readelf的源码中变量类型Elf_Internal_Ehdr_,定义在internal头文件中

#define

EI_NIDENT        16                /* Size of e_ident[] */

typedef

struct elf_internal_ehdr {

unsigned char                e_ident[EI_NIDENT];   /* ELF "magic

number" */

bfd_vma                      e_entry;              /* Entry point virtual address */

bfd_size_type                e_phoff;              /* Program header table file offset */

bfd_size_type                e_shoff;              /* Section header table file offset */

unsigned long                e_version;            /* Identifies object file version */

unsigned long                e_flags;              /* Processor-specific flags */

unsigned short               e_type;               /* Identifies object file type */

unsigned short               e_machine;            /* Specifies required architecture */

unsigned int                 e_ehsize;             /* ELF header size in bytes */

unsigned int                 e_phentsize;          /* Program header table entry size */

unsigned int                 e_phnum;

/* Program header table

entry count */

unsigned int                 e_shentsize;           /* Section header table entry size */

unsigned int                 e_shnum;

/* Section header table

entry count */

unsigned int                 e_shstrndx;            /* Section header string table index */

}

Elf_Internal_Ehdr;

你可能感兴趣的:(linux,解析elf文件格式)