Skip to content

ELF

struct elf64_ident {
uint32_t magic;
uint8_t class;
uint8_t data;
uint8_t version;
uint8_t os_abi;
uint8_t abi_version;
uint8_t pad[7];
};
struct elf64_ehdr {
struct elf64_ident ident;
uint16_t type;
uint16_t machine;
uint32_t version;
uint64_t entry;
uint64_t phoff;
uint64_t shoff;
uint32_t flags;
uint16_t ehsize;
uint16_t phentsize;
uint16_t phnum;
uint16_t shentsize;
uint16_t shnum;
uint16_t shstrndx;
};

struct elf64_ehdr referenced types:

struct elf64_phdr {
uint32_t type;
uint32_t flags;
uint64_t offset;
uint64_t vaddr;
uint64_t paddr;
uint64_t filesz;
uint64_t memsz;
uint64_t align;
};
uint64_t elf_load(void *elf_data);
void enter_userspace(uintptr_t entry_point, uintptr_t user_stack_top, uint16_t user_cs, uint16_t user_ss, uintptr_t user_pml4_phys);
void syscall_setup(void *syscall_entry);
uintptr_t map_user_stack(uintptr_t user_pml4_phys);
void elf_map(uintptr_t user_pml4_phys, void *elf_data);
#define PT_LOAD 1
#define PF_X 0x1
#define PF_W 0x2
#define PF_R 0x4