diff options
Diffstat (limited to '')
| -rw-r--r-- | bootloader/ELF.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/bootloader/ELF.h b/bootloader/ELF.h new file mode 100644 index 0000000..c379a91 --- /dev/null +++ b/bootloader/ELF.h @@ -0,0 +1,56 @@ +#ifndef ELF_H +#define ELF_H + +#include <efi.h> + +#define ELFMAGIC 0x464C457F + +// Elf header struct +typedef struct ELF +{ + UINT8 e_ident[16]; + UINT16 e_type; + UINT16 e_machine; + UINT32 e_version; + UINT64 e_entry; + UINT64 e_phoff; + UINT64 e_shoff; + UINT32 e_flags; + UINT16 e_ehsize; + UINT16 e_phentsize; + UINT16 e_phnum; + UINT16 e_shentsize; + UINT16 e_shnum; + UINT16 e_shstrndx; +} ELF; + +typedef struct PH +{ + UINT32 p_type; + UINT32 p_flags; + UINT64 p_offset; + UINT64 p_vaddr; + UINT64 p_paddr; + UINT64 p_filesz; + UINT64 p_memsz; + UINT64 p_align; +} PH; + +typedef struct Loaded_PH +{ + UINT64 mem_size; + UINT64 vaddr; + void* data; +} Loaded_PH; + +typedef struct Loaded_ELF +{ + UINT64 ph_num; + UINT64 entry; + Loaded_PH* ph; +} Loaded_ELF; + +void EFIAPI PrintELFInfo(ELF * file); +Loaded_ELF* EFIAPI LoadELF(ELF* file); + +#endif |
