#ifndef __ELF64_H #define __ELF64_H #include "os.h" #define ELF64_P_EXEC (1<<0) typedef u64 Elf64_Addr; typedef u64 Elf64_Off; typedef u16 Elf64_Half; typedef u32 Elf64_Word; typedef i32 Elf64_Sword; typedef u64 Elf64_Xword; typedef i64 Elf64_Sxword; typedef struct { unsigned char e_ident[16]; /* ELF identification */ Elf64_Half e_type; /* Object file type */ Elf64_Half e_machine; /* Machine type */ Elf64_Word e_version; /* Object file version */ Elf64_Addr e_entry; /* Entry point address */ Elf64_Off e_phoff; /* Program header offset */ Elf64_Off e_shoff; /* Section header offset */ Elf64_Word e_flags; /* Processor-specific flags */ Elf64_Half e_ehsize; /* ELF header size */ Elf64_Half e_phentsize; /* Size of program header entry */ Elf64_Half e_phnum; /* Number of program header entries */ Elf64_Half e_shentsize; /* Size of section header entry */ Elf64_Half e_shnum; /* Number of section header entries */ Elf64_Half e_shstrndx; /* Section name string table index */ } Elf64_Ehdr; typedef struct { Elf64_Word p_type; /* Type of segment */ Elf64_Word p_flags; /* Segment attributes */ Elf64_Off p_offset; /* Offset in file */ Elf64_Addr p_vaddr; /* Virtual address in memory */ Elf64_Addr p_paddr; /* Reserved */ Elf64_Xword p_filesz; /* Size of segment in file */ Elf64_Xword p_memsz; /* Size of segment in memory */ Elf64_Xword p_align; /* Alignment of segment */ } Elf64_Phdr; #endif