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文件信息
查看readelf中的源码
一个典型的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头
在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;