46 lines
1.4 KiB
C
46 lines
1.4 KiB
C
#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
|