mirror of
https://github.com/zeldaret/oot.git
synced 2024-11-10 19:20:13 +00:00
73 lines
1.2 KiB
C
73 lines
1.2 KiB
C
|
#ifndef _ELF_H_
|
||
|
#define _ELF_H_
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
ELF_MACHINE_NONE = 0,
|
||
|
ELF_MACHINE_MIPS = 8,
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
ELF_TYPE_RELOC = 1,
|
||
|
ELF_TYPE_EXEC,
|
||
|
ELF_TYPE_SHARED,
|
||
|
ELF_TYPE_CORE,
|
||
|
};
|
||
|
|
||
|
struct Elf32
|
||
|
{
|
||
|
uint8_t endian;
|
||
|
uint16_t type;
|
||
|
uint16_t machine;
|
||
|
uint32_t version;
|
||
|
uint32_t entry;
|
||
|
uint32_t phoff;
|
||
|
uint32_t shoff;
|
||
|
uint16_t ehsize;
|
||
|
uint16_t phentsize;
|
||
|
uint16_t phnum;
|
||
|
uint16_t shentsize;
|
||
|
uint16_t shnum;
|
||
|
uint16_t shstrndx;
|
||
|
int symtabndx;
|
||
|
int strtabndx;
|
||
|
int numsymbols;
|
||
|
|
||
|
const uint8_t *data;
|
||
|
size_t dataSize;
|
||
|
uint16_t (*read16)(const uint8_t *);
|
||
|
uint32_t (*read32)(const uint8_t *);
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
SHT_NULL = 0,
|
||
|
SHT_PROGBITS,
|
||
|
SHT_SYMTAB,
|
||
|
SHT_STRTAB,
|
||
|
};
|
||
|
|
||
|
struct Elf32_Section
|
||
|
{
|
||
|
const char *name;
|
||
|
uint32_t type;
|
||
|
uint32_t flags;
|
||
|
uint32_t addr;
|
||
|
uint32_t offset;
|
||
|
uint32_t addralign;
|
||
|
uint32_t entsize;
|
||
|
};
|
||
|
|
||
|
struct Elf32_Symbol
|
||
|
{
|
||
|
const char *name;
|
||
|
uint32_t value;
|
||
|
};
|
||
|
|
||
|
bool elf32_init(struct Elf32 *e, const void *data, size_t size);
|
||
|
bool elf32_get_section(struct Elf32 *e, struct Elf32_Section *sec, int secnum);
|
||
|
bool elf32_get_symbol(struct Elf32 *e, struct Elf32_Symbol *sym, int symnum);
|
||
|
|
||
|
#endif
|