blob: ae0fa71b1e38aa4729d6a86b4afe6bad0f620fb9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include "elf.h"
#include "init.h"
#include <stddef.h>
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;
}
|