You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.1 KiB
C
101 lines
2.1 KiB
C
1 year ago
|
/**
|
||
|
* @file elf.h
|
||
|
* @brief Defines ELF binary format info.
|
||
|
*
|
||
|
* Free to use, written by Clyne Sullivan.
|
||
|
*/
|
||
|
|
||
|
#ifndef STMDSP_ELF_HPP
|
||
|
#define STMDSP_ELF_HPP
|
||
|
|
||
|
#include <cstdint>
|
||
|
|
||
|
#define EI_NIDENT 16
|
||
|
|
||
|
#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_RESERVED 0x70000000
|
||
|
|
||
|
#define ELF32_ST_BIND(i) ((i) >> 4)
|
||
|
#define ELF32_ST_TYPE(i) ((i) & 0xF)
|
||
|
#define ELF32_ST_INFO(b, t) (((b) << 4) + ((t) & 0xF))
|
||
|
|
||
|
#define ELF32_R_SYM(i) ((i) >> 8)
|
||
|
#define ELF32_R_TYPE(i) ((i) & 0xFF)
|
||
|
#define ELF32_R_INFO(s, t) (((s) << 8) + ((t) & 0xFF))
|
||
|
|
||
|
typedef uint32_t Elf32_Addr;
|
||
|
typedef uint16_t Elf32_Half;
|
||
|
typedef uint32_t Elf32_Off;
|
||
|
typedef uint32_t Elf32_Sword;
|
||
|
typedef uint32_t Elf32_Word;
|
||
|
|
||
|
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;
|
||
|
} __attribute__((packed)) Elf32_Ehdr;
|
||
|
|
||
|
typedef struct {
|
||
|
Elf32_Word sh_name;
|
||
|
Elf32_Word sh_type;
|
||
|
Elf32_Word sh_flags;
|
||
|
Elf32_Addr sh_addr;
|
||
|
Elf32_Off sh_offset;
|
||
|
Elf32_Word sh_size;
|
||
|
Elf32_Word sh_link;
|
||
|
Elf32_Word sh_info;
|
||
|
Elf32_Word sh_addralign;
|
||
|
Elf32_Word sh_entsize;
|
||
|
} __attribute__((packed)) Elf32_Shdr;
|
||
|
|
||
|
typedef struct {
|
||
|
Elf32_Word st_name;
|
||
|
Elf32_Addr st_value;
|
||
|
Elf32_Word st_size;
|
||
|
unsigned char st_info;
|
||
|
unsigned char st_other;
|
||
|
Elf32_Half st_shndx;
|
||
|
} __attribute__((packed)) Elf32_Sym;
|
||
|
|
||
|
typedef struct {
|
||
|
Elf32_Addr r_offset;
|
||
|
Elf32_Word r_info;
|
||
|
} __attribute__((packed)) Elf32_Rel;
|
||
|
|
||
|
typedef struct {
|
||
|
Elf32_Addr r_offset;
|
||
|
Elf32_Word r_info;
|
||
|
Elf32_Sword r_addend;
|
||
|
} __attribute__((packed)) Elf32_Rela;
|
||
|
|
||
|
typedef struct {
|
||
|
Elf32_Word p_type;
|
||
|
Elf32_Off p_offset;
|
||
|
Elf32_Addr p_vaddr;
|
||
|
Elf32_Addr p_paddr;
|
||
|
Elf32_Word p_filesz;
|
||
|
Elf32_Word p_memsz;
|
||
|
Elf32_Word p_flags;
|
||
|
Elf32_Word p_align;
|
||
|
} __attribute__((packed)) Elf32_Phdr;
|
||
|
|
||
|
#endif // STMDSP_ELF_HPP
|
||
|
|