#include "elf.h" #include "init.h" #include int elf64_ehdr_valid(Elf64_Ehdr *ehdr) { if(ehdr->e_ident[EI_MAG0] != ELFMAG0 || ehdr->e_ident[EI_MAG1] != ELFMAG1 || ehdr->e_ident[EI_MAG2] != ELFMAG2 || ehdr->e_ident[EI_MAG3] != ELFMAG3) return 0; if(ehdr->e_ident[EI_CLASS] != ELFCLASS64) return 0; if(ehdr->e_ident[EI_DATA] != ELFDATA2LSB) return 0; if(ehdr->e_type != ET_EXEC) return 0; if(ehdr->e_machine != EM_X86_64) return 0; return 1; } void* elf64_loadexec(Elf64_Ehdr *ehdr) { if(!elf64_ehdr_valid(ehdr)) return NULL; void *entry = (void*)ehdr->e_entry; return entry; }