ELF文件结构描述

文件头

查看文件头 $ readelf -h *.obj

Elf32_Ehdr

变量名

英文名

备注

e_ident

Magic

ELF魔数

Class

文件机器字节长度

Data

数据存储方式

Version

版本

OS/ABI

运行平台

ABI Version

ABI版本

e_type

Type

ELF文件类型(ELF重定位类型)

e_machine

Machine

ELF文件的CPU平台属性(硬件平台)

e_version

Version

ELF版本号(硬件平台版本)

e_entry

Entry point address

入口地址

e_phoff

Start of program headers

程序头入口

e_shoff

Start of section headers

段表在文件中的偏移

e_word

Flags

ELF标志位

e_ehsize

Size of this header

ELF文件头本身的大小

e_phentsize

Size of program headers

程序头长度

e_phnum

Number of program headers

程序头数量

e_shentsize

Size of section headers

段表描述符的大小

e_shnum

Number of section headers

段表描述符数量

e_shstrndx

Section header string table index

段表字符串表所载的段在段表中的下标

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

段表

查看段表结构 $ readelf -S *.obj

段表的结构比较简单,它是一个以“Elf32_Shdr”结构体为元素的数组。数组元素的个数等于段的个数,每个结构体对应一个段。“Elf32_Shdr”又被称为段描述符。

Elf32_Shdr

变量名

英文名

备注

sh_name

Section name

段名

sh_type

Section type

段的类型

sh_flags

Section flag

段的标志位

sh_addr

Section Address

段虚拟地址

sh_offset

Section Offset

段偏移

sh_size

Section Size

段的长度

sh_link和sh_info

Section Link and Section Information

段链接信息

sh_addralign

Section Address Alignment

段地址对齐

sh_entsize

Section Entry Size

项的长度

 

 

 

 

 

 

 

 

 

Name

sh_type

sh_flag

sh_link

sh_info

.dynamic

SHT_DYNAMIC

SHF_ALLOC + SHF_WRITE

该段所使用的字符串表在段表中的下标

0

.hash

SHT_HASH

SHF_ALLOC

该段所使用的符号表在段表中的下标

0

SHT_REL

该段所使用的相应符号表在段表中的下标

该重定位表所作用的段在段表中的下标

SHT_RELA

.symtab

SHT_STMTAB

同字符串表

操作系统相关的

操作系统相关的

SHT_DYNSYM

.bss

SHT_NOBITS

SHF_ALLOC + SHF_WRITE

SHN_UNDEF

0

.comment

SHT_PROGBITS

none

.data

SHF_ALLOC + SHF_WRITE

.data1

SHF_ALLOC + SHF_WRITE

.debug

none

.line

none

.rodata

SHF_ALLOC

.rodata1

SHF_ALLOC

.text

SHF_ALLOC + SHF_EXECINSTR

.note

SHT_NOTE

none

.shstrtab

SHT_STRTAB

none

.strtab

如果该ELF文件中有可装载的段须要用到该字符串表,

name该字符串表也将被装载到进程空间,则有SHF_ALLOC标志位

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

重定位表

字符串表

原文地址:https://www.cnblogs.com/fr-ruiyang/p/9871725.html