共找到11條詞條名為ELF的結果 展開
ELF
文件格式
徠在計算機科學中,是一種用於二進位文件、可執行文件、目標代碼、共享庫和核心轉儲格式文件。
是UNIX系統實驗室(USL)作為應用程序二進位介面(Application Binary Interface,ABI)而開發和發布的,也是Linux的主要可執行文件格式。
1999年,被86open項目選為x86架構上的類Unix操作系統的二進位文件標準格式,用來取代COFF。因其可擴展性與靈活性,也可應用在其它處理器、計算機系統架構的操作系統上。
ELF[文件格式]
#d徠efine 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_Addr | 4 | 4 | 無符號程序地址 |
Elf32_Half | 2 | 2 | 無符號中等大小整數 |
Elf32_Off | 4 | 4 | 無符號文件偏移 |
Elf32_Sword | 4 | 4 | 有符號大整數 |
Elf32_Word | 4 | 4 | 無符號大整數 |
unsigned char | 1 | 1 | 無符號小整數 |
最開頭是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描述的是一個段在文件中的位置、大小以及它被放進內存后所在的位置和大小。
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 根據此項值來確定段在文件及內存中如何對齊。