ELF[檔案格式]

ELF[檔案格式]

在計算機科學中,是一種用於二進制檔案、執行檔、目標代碼、共享庫和核心轉儲格式檔案。

是UNIX系統實驗室(USL)作為應用程式二進制接口(Application Binary Interface,ABI)而開發和發布的,也是Linux的主要執行檔格式。

1999年,被86open項目選為x86架構上的類Unix作業系統的二進制檔案標準格式,用來取代COFF。因其可擴展性與靈活性,也可套用在其它處理器、計算機系統架構的作業系統上。

ELF檔案組成部分

ELF[檔案格式] ELF[檔案格式]

ELF檔案由4部分組成,分別是ELF頭(ELF header)、程式頭表(Program header table)、節(Section)和節頭表(Section header table)。實際上,一個檔案中不一定包含全部內容,而且他們的位置也未必如同所示這樣安排,只有ELF頭的位置是固定的,其餘各部分的位置、大小等信息由ELF頭中的各項值來決定。

ELF header

格式代碼如下:

#define EI_NIDENT 16
typedef struct{
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
}Elf32_Ehdr;

數據類型說明:

名稱大小對齊用途
Elf32_Addr44無符號程式地址
Elf32_Half22無符號中等大小整數
Elf32_Off44無符號檔案偏移
Elf32_Sword44有符號大整數
Elf32_Word44無符號大整數
unsigned char11無符號小整數

代碼項含義:

最開頭是16個位元組的e_ident, 其中包含用以表示ELF檔案的字元,以及其他一些與機器無關的信息。開頭的4個位元組值固定不變,為0x7f和ELF三個字元。

e_type 它標識的是該檔案的類型。

e_machine 表明運行該程式需要的體系結構。

e_version 表示檔案的版本。

e_entry 程式的入口地址。

e_phoff 表示Program header table 在檔案中的偏移量(以位元組計數)。

e_shoff 表示Section header table 在檔案中的偏移量(以位元組計數)。

e_flags 對IA32而言,此項為0。

e_ehsize 表示ELF header大小(以位元組計數)。

e_phentsize 表示Program header table中每一個條目的大小。

e_phnum 表示Program header table中有多少個條目。

e_shentsize表示Section header table中的每一個條目的大小。

e_shnum 表示Section header table中有多少個條目。

e_shstrndx 包含節名稱的字元串是第幾個節(從零開始計數)。

Program header

Program header描述的是一個段在檔案中的位置、大小以及它被放進記憶體後所在的位置和大小。

格式代碼如下:

typedef struct {

Elf32_Wordp_type;

Elf32_Offp_offset;

Elf32_Addr p_vaddr;

Elf32_Addr p_paddr;

Elf32_Wordp_filesz;

Elf32_Word p_memsz;

Elf32_Word p_flags;

Elf32_Word p_align;

}

代碼項含義:

p_type 當前Program header所描述的段的類型。

p_offset 段的第一個位元組在檔案中的偏移。

p_vaddr 段的一個位元組在記憶體中的虛擬地址

p_paddr 在物理記憶體定位相關的系統中,此項是為物理地址保留。

p_filesz 段在檔案中的長度。

p_memsz 段在記憶體中的長度。

p_flags 與段相關的標誌。

p_align 根據此項值來確定段在檔案及記憶體中如何對齊。

相關詞條

相關搜尋

熱門詞條

聯絡我們