From 4c79f86b89b599c9e104413df0d5e923714a3a69 Mon Sep 17 00:00:00 2001 From: Moysan Gabriel Date: Wed, 8 Mar 2023 14:38:02 +0100 Subject: [PATCH] dataTypes definition --- src/kernel/elf.rs | 143 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/kernel/elf.rs diff --git a/src/kernel/elf.rs b/src/kernel/elf.rs new file mode 100644 index 0000000..84dce69 --- /dev/null +++ b/src/kernel/elf.rs @@ -0,0 +1,143 @@ +//Declaration des alias + +/* + Def ELF : + + The header file defines the format of ELF executable binary + files. Amongst these files are normal executable files, relocatable + object files, core files and shared libraries. + + An executable file using the ELF file format consists of an ELF header, + followed by a program header table or a section header table, or both. + The ELF header is always at offset zero of the file. The program + header table and the section header table's offset in the file are + defined in the ELF header. The two tables describe the rest of the + particularities of the file + */ + + +/* Type for a 16-bit quantity. */ + +type Elf32_Half = u16; + +type Elf64_Half = u16; + +/* Types for signed and unsigned 32-bit quantities. */ + +type Elf32_Word = u32; + +type Elf32_Sword = i32; + +type Elf64_Word = u32; + +type Elf64_Sword = i32; + +/* Types for signed and unsigned 64-bit quantities. */ + +type Elf32_Xword = u64; + +type Elf32_Sxword = i64; + +type Elf64_Xword = u64; + +type Elf64_Sxword = i64; + +/* Type of addresses. */ + +type Elf32_Addr = u32; + +type Elf64_Addr = u64; + +/* Type of file offsets. */ + +type Elf32_Off = u32; + +type Elf64_Off = u64; + +//role de ce truc ? +const EI_NIDENT : u8 = 16; + +//ELF file header 32 bits +struct Elf32Ehdr{ + e_ident : [u8;EI_NIDENT],//16 octects décrivant comment le fichier doit etre parsé + //e_ident must starts with magice number : 0x 7f 45 4c 46 + e_type : Elf32_Half,//type of the file + e_machine : Elf32_Half,//type architecture machine + e_version : Elf32_Word,//always 1 + e_entry : Elf32_Addr,//entry point @ for executable + e_phoff : Elf32_Off,//Offset of the program header table + e_shoff : Elf32_Off,//Offset of the section header table + e_flags : Elf32_Word,//des flags ? + e_ehsize : Elf32_Half,//size of this (the header), redundant + e_phentsize : Elf32_Half,//size per program header + e_phnum : Elf32_Half,//number of program header + e_shentsize : Elf32_Half,//size per section header + e_shnum : Elf32_Half,//number of section header + e_shstrndx : Elf32_Half//section header string table index +} + + +//ELF file header 64 bits +//les champs ont le meme rôle que dans le header 32 bits +struct Elf64Ehdr{ + e_ident : [u8;EI_NIDENT], + e_type : Elf64_Half, + e_machine : Elf64_Half, + e_version : Elf64_Word, + e_entry : Elf64_Addr, + e_phoff : Elf64_Off, + e_shoff : Elf64_Off, + e_flags : Elf64_Word, + e_ehsize : Elf64_Half, + e_phentsize : Elf64_Half, + e_phnum : Elf64_Half, + e_shentsize : Elf64_Half, + e_shnum : Elf64_Half, + e_shstrndx : Elf64_Half +} + + + +/* e_ident offsets */ +const EI_MAG0 : u32 = 0; +const EI_MAG1 : u32 = 1; +const EI_MAG2 : u32 = 2; +const EI_MAG3 : u32 = 3; +const EI_CLASS : u32 = 4; +const EI_DATA : u32 = 5; +const EI_VERSION : u32 = 6; +const EI_PAD : u32 = 7; + +/* e_ident[EI_CLASS] */ +const ELFCLASSNONE : u32 = 0; +const ELFCLASS32 : u32 = 1; +const ELFCLASS64 : u32 = 2; + +/* e_ident[EI_DATA] */ +const ELFDATANONE : u32 = 0; +const ELFDATA2LSB : u32 = 1; +const ELFDATA2MSB : u32 = 2; + +/* e_type */ +const ET_NONE : u32 = 0; /* No file type */ +const ET_REL : u32 = 1; /* Relocatable file */ +const ET_EXEC : u32 = 2; /* Executable file */ +const ET_DYN : u32 = 3; /* Shared object file */ +const ET_CORE : u32 = 4; /* Core file */ +const ET_LOPROC : u32 = 0xff00; /* Processor-specific */ +const ET_HIPROC : u32 = 0xffff; /* Processor-specific */ + +/* e_machine */ +const EM_NONE : u32 = 0; /* No machine */ +const EM_M32 : u32 = 1; /* AT&T WE 32100 */ +const EM_SPARC : u32 = 2; /* SPARC */ +const EM_386 : u32 = 3; /* Intel 80386 */ +const EM_68K : u32 = 4; /* Motorola 68000 */ +const EM_88K : u32 = 5; /* Motorola 88000 */ +const EM_860 : u32 = 7; /* Intel 80860 */ +const EM_MIPS : u32 = 8; /* MIPS R3000 */ +const EM_RISC : u32 = 243; /* RISCV */ + +/* e_version */ + const EV_NONE : u32 = 0; /* invalid version */ + const EV_CURRENT : u32 = 1; /* current version */