71 lines
2.2 KiB
C
71 lines
2.2 KiB
C
/* 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 file’s 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 */
|