153 lines
2.9 KiB
C
153 lines
2.9 KiB
C
#ifndef _ELF_H
|
|
#define _ELF_H
|
|
|
|
/* THese constants are for the segment types stored in the image headers */
|
|
#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_LOPROC 0x70000000
|
|
#define PT_HIPROC 0x7fffffff
|
|
|
|
/* These constants define the different elf file types */
|
|
#define ET_NONE 0
|
|
#define ET_REL 1
|
|
#define ET_EXEC 2
|
|
#define ET_DYN 3
|
|
#define ET_CORE 4
|
|
#define ET_LOPROC 5
|
|
#define ET_HIPROC 6
|
|
|
|
/* These constants define the various ELF target machines */
|
|
#define EM_NONE 0
|
|
#define EM_M32 1
|
|
#define EM_SPARC 2
|
|
#define EM_386 3
|
|
#define EM_68K 4
|
|
#define EM_88K 5
|
|
#define EM_486 6 /* Perhaps disused */
|
|
#define EM_860 7
|
|
|
|
/* This is the info that is needed to parse the dynamic section of the file */
|
|
#define DT_NULL 0
|
|
#define DT_NEEDED 1
|
|
#define DT_PLTRELSZ 2
|
|
#define DT_PLTGOT 3
|
|
#define DT_HASH 4
|
|
#define DT_STRTAB 5
|
|
#define DT_SYMTAB 6
|
|
#define DT_RELA 7
|
|
#define DT_RELASZ 8
|
|
#define DT_RELAENT 9
|
|
#define DT_STRSZ 10
|
|
#define DT_SYMENT 11
|
|
#define DT_INIT 12
|
|
#define DT_FINI 13
|
|
#define DT_SONAME 14
|
|
#define DT_RPATH 15
|
|
#define DT_SYMBOLIC 16
|
|
#define DT_REL 17
|
|
#define DT_RELSZ 18
|
|
#define DT_RELENT 19
|
|
#define DT_PLTREL 20
|
|
#define DT_DEBUG 21
|
|
#define DT_TEXTREL 22
|
|
#define DT_JMPREL 23
|
|
#define DT_LOPROC 0x70000000
|
|
#define DT_HIPROC 0x7fffffff
|
|
|
|
/* This info is needed when parsing the symbol table */
|
|
#define STB_LOCAL 0
|
|
#define STB_GLOBAL 1
|
|
#define STB_WEAK 2
|
|
|
|
#define STT_NOTYPE 0
|
|
#define STT_OBJECT 1
|
|
#define STT_FUNC 2
|
|
#define STT_SECTION 3
|
|
#define STT_FILE 4
|
|
|
|
#define ELF32_ST_BIND(x) ((x) >> 4)
|
|
#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf)
|
|
|
|
|
|
|
|
struct dynamic{
|
|
int d_tag;
|
|
union{
|
|
int d_val;
|
|
char * d_ptr;
|
|
} d_un;
|
|
};
|
|
|
|
/* THe following are used with relocations */
|
|
#define ELF32_R_SYM(x) ((x) >> 8)
|
|
#define ELF32_R_TYPE(x) ((x) & 0xff)
|
|
|
|
#define R_386_NONE 0
|
|
#define R_386_32 1
|
|
#define R_386_PC32 2
|
|
#define R_386_GOT32 3
|
|
#define R_386_PLT32 4
|
|
#define R_386_COPY 5
|
|
#define R_386_GLOB_DAT 6
|
|
#define R_386_JMP_SLOT 7
|
|
#define R_386_RELATIVE 8
|
|
#define R_386_GOTOFF 9
|
|
#define R_386_GOTPC 10
|
|
#define R_386_NUM 11
|
|
|
|
struct Elf32_Rel{
|
|
unsigned int * offset;
|
|
int info;
|
|
};
|
|
|
|
struct Elf32_Rela{
|
|
unsigned int * offset;
|
|
int info;
|
|
int addend;
|
|
};
|
|
|
|
struct Elf32_Sym{
|
|
int st_name;
|
|
unsigned int st_value;
|
|
int st_size;
|
|
unsigned char st_info;
|
|
unsigned char st_other;
|
|
short int st_shndx;
|
|
};
|
|
|
|
struct elfhdr{
|
|
char e_ident[16];
|
|
short int e_type;
|
|
short int e_machine;
|
|
int e_version;
|
|
char *e_entry; /* Entry point */
|
|
int e_phoff;
|
|
int e_shoff;
|
|
int e_flags;
|
|
short int e_ehsize;
|
|
short int e_phentsize;
|
|
short int e_phnum;
|
|
short int e_shentsize;
|
|
short int e_shnum;
|
|
short int e_shstrndx;
|
|
};
|
|
|
|
struct elf_phdr{
|
|
int p_type;
|
|
int p_offset;
|
|
int p_vaddr;
|
|
int p_paddr;
|
|
int p_filesz;
|
|
int p_memsz;
|
|
int p_flags;
|
|
int p_align;
|
|
};
|
|
|
|
#define ELF_START_MMAP 0x80000000
|
|
|
|
#endif
|