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文件信息

745491b04daa87040d8e5641b15e1758.png

查看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头

806b53e0e08431e58fe6da0b96ba3c70.png

在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;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值