116 lines
2.3 KiB
C
116 lines
2.3 KiB
C
#pragma once
|
|
|
|
#include <lcrash/types.h>
|
|
|
|
#define ET_NONE 0
|
|
#define ET_REL 1
|
|
#define ET_EXEC 2
|
|
#define ET_DYN 3
|
|
#define ET_CORE 4
|
|
|
|
#define PT_NULL 0
|
|
#define PT_LOAD 1
|
|
#define PT_DYNAMIC 2
|
|
#define PT_INTERP 3
|
|
#define PT_NOTE 4
|
|
#define PT_SHLIB 5
|
|
#define PT_PHDR 6
|
|
#define PT_TLS 7
|
|
|
|
#define SHT_NULL 0
|
|
#define SHT_PROGBITS 1
|
|
#define SHT_SYMTAB 2
|
|
#define SHT_STRTAB 3
|
|
#define SHT_RELA 4
|
|
#define SHT_HASH 5
|
|
#define SHT_DYNAMIC 6
|
|
#define SHT_NOTE 7
|
|
#define SHT_NOBITS 8
|
|
#define SHT_REL 9
|
|
#define SHT_SHLIB 10
|
|
#define SHT_DYNSYM 11
|
|
#define SHT_INIT_ARRAY 14
|
|
#define SHT_FINI_ARRAY 15
|
|
#define SHT_PREINIT_ARRAY 16
|
|
#define SHT_GROUP 17
|
|
#define SHT_SYMTAB_SHNDX 18
|
|
|
|
struct [[gnu::packed]] Elf64_Ehdr {
|
|
c8 e_ident[16];
|
|
u16 e_type;
|
|
u16 e_machine;
|
|
u32 e_version;
|
|
u64 e_entry;
|
|
u64 e_phoff;
|
|
u64 e_shoff;
|
|
u32 e_flags;
|
|
u16 e_ehsize;
|
|
u16 e_phentsize;
|
|
u16 e_phnum;
|
|
u16 e_shentsize;
|
|
u16 e_shnum;
|
|
u16 e_shstrndx;
|
|
};
|
|
|
|
struct [[gnu::packed]] Elf64_Phdr {
|
|
u32 p_type;
|
|
u32 p_flags;
|
|
u64 p_offset;
|
|
u64 p_vaddr;
|
|
u64 p_paddr;
|
|
u64 p_filesz;
|
|
u64 p_memsz;
|
|
u64 p_align;
|
|
};
|
|
|
|
struct [[gnu::packed]] Elf64_Shdr {
|
|
u32 sh_name;
|
|
u32 sh_type;
|
|
u64 sh_flags;
|
|
u64 sh_addr;
|
|
u64 sh_offset;
|
|
u64 sh_size;
|
|
u32 sh_link;
|
|
u32 sh_info;
|
|
u64 sh_addralign;
|
|
u64 sh_entsize;
|
|
};
|
|
|
|
#define ELF64_R_SYM(info) ((info)>>32);
|
|
#define ELF64_R_TYPE(info) ((u32)info)
|
|
#define ELF64_R_AMD64_NONE 0
|
|
#define ELF64_R_AMD64_64 1
|
|
#define ELF64_R_AMD64_PC32 2
|
|
#define ELF64_R_AMD64_GOT32 3
|
|
#define ELF64_R_AMD64_PLT32 4
|
|
#define ELF64_R_AMD64_COPY 5
|
|
#define ELF64_R_AMD64_GLOB_DAT 6
|
|
#define ELF64_R_AMD64_JUMP_SLOT 7
|
|
#define ELF64_R_AMD64_RELATIVE 8
|
|
#define ELF64_R_AMD64_GOTPCREL 9
|
|
#define ELF64_R_AMD64_32 10
|
|
#define ELF64_R_AMD64_32S 11
|
|
#define ELF64_R_AMD64_16 12
|
|
#define ELF64_R_AMD64_PC16 13
|
|
#define ELF64_R_AMD64_8 14
|
|
#define ELF64_R_AMD64_PC8 15
|
|
#define ELF64_R_AMD64_PC64 24
|
|
#define ELF64_R_AMD64_GOTOFF64 25
|
|
#define ELF64_R_AMD64_GOTPC32 26
|
|
#define ELF64_R_AMD64_SIZE32 32
|
|
#define ELF64_R_AMD64_SIZE64 33
|
|
struct [[gnu::packed]] Elf64_Rela {
|
|
u64 r_offset;
|
|
u64 r_info;
|
|
s64 r_addend;
|
|
};
|
|
|
|
struct [[gnu::packed]] Elf64_Sym {
|
|
u32 st_name;
|
|
u8 st_info;
|
|
u8 st_other;
|
|
u16 st_shndx;
|
|
u64 st_value;
|
|
u64 st_size;
|
|
};
|