enby/lib/elf/eheader.h

71 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* The ELF header resides at the beginning of an ELF file.
* It identifies the file as an ELF file and contains the information
* necessary for interpreting the contents of the file and locating
* the other components of the file.
* REF: https://gabi.xinuos.com/elf/02-eheader.html#elf-header
*/
#ifndef BFPG_ELF_HEADER_H
# define BFPG_ELF_HEADER_H
# include "eint.h"
# define EI_NIDENT (16)
typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;
typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf64_Half e_type;
Elf64_Half e_machine;
Elf64_Word e_version;
Elf64_Addr e_entry;
Elf64_Off e_phoff;
Elf64_Off e_shoff;
Elf64_Word e_flags;
Elf64_Half e_ehsize;
Elf64_Half e_phentsize;
Elf64_Half e_phnum;
Elf64_Half e_shentsize;
Elf64_Half e_shnum;
Elf64_Half e_shstrndx;
} Elf64_Ehdr;
/* == ElfXX_Ehdr.e_ident[] ==
* EI_* macros define indexes into this this, and are followed
* by a series a macros defining legal values for that index.
*/
# define E_IDENT_DESC ( \
"The initial bytes of an ELF file. Marking it as an object file " \
"and providing machine-independent data with which to decode " \
"and interpret the files contents."
/* == ElfXX_Ehdr.e_type == */
enum e_type_t : Elf64_Addr {
ET_NONE = 0, /* No file type */
ET_REL = 1, /* Relocatable file */
ET_EXEC = 2, /* Executable file */
ET_DYN = 3, /* Shared object file */
ET_CORE = 4, /* Core file */
ET_LOOS = 0xfe00, /* OS-specific range start */
ET_HIOS = 0xfeff, /* OS-specific range end */
ET_LOPROC = 0xff00, /* Processor-specific range start */
ET_HIPROC = 0xffff, /* Processor-specific range end */
};
#endif /* BFPG_ELF_HEADER_H */