mirror of https://github.com/zeldaret/mm.git
				
				
				
			
		
			
				
	
	
		
			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
 |