⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elf.h

📁 ELFkickers是一组elf工具
💻 H
📖 第 1 页 / 共 2 页
字号:
/* elf.h: definitions of ELF structures and symbols * * The usage of ELF under Linux is currently in flux, even ignoring * architectures beyond the x86. As a result, I have found it hard to * make use of the usual header files <elf.h> and <linux/elf.h> in * this program, as newer symbols do not appear in the header files * associated with earlier versions of the kernel and/or compiler. * Furthermore, the two header files are incompatible with each other, * as they have numerous overlapping (yet occasionally different) * typedefs, yet a number of definitions appear in one file but not * the other. To avoid this mess, elftoc uses this include file * instead. Where possible, the definitions are taken verbatim from * the original ELF standard itself. Other definitions are extracted * from recent versions of the aforementioned system header files. * * By using this header file instead, elftoc (and the source code it * generates) is made much more independent of the details of the * system it was originally compiled on. */#ifndef	_elftoc_elf_h_#define	_elftoc_elf_h_/* * The platform-dependent typedefs. */typedef	unsigned int	Elf32_Addr;typedef	unsigned short	Elf32_Half;typedef	unsigned int	Elf32_Off;typedef	unsigned int	Elf32_Word;typedef	signed int	Elf32_Sword;/* * Definitions taken from the ELF standard. *//* Figure 1-3: ELF Header */#define EI_NIDENT       16typedef 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;#define ET_NONE         0  /* No file type */#define ET_REL          1  /* Relocatable file */#define ET_EXEC         2  /* Executable file */#define ET_DYN          3  /* Shared object file */#define ET_CORE         4  /* Core file */#define ET_LOPROC  0xff00  /* Processor-specific */#define ET_HIPROC  0xffff  /* Processor-specific */#define EM_NONE       0  /* No machine */#define EM_M32        1  /* AT&T WE 32100 */#define EM_SPARC      2  /* SPARC */#define EM_386        3  /* Intel 80386 */#define EM_68K        4  /* Motorola 68000 */#define EM_88K        5  /* Motorola 88000 */#define EM_860        7  /* Intel 80860 */#define EM_MIPS       8  /* MIPS RS3000 */#define EV_NONE          0  /* Invalid version */#define EV_CURRENT       1  /* Current version *//* Figure 1-4: e_ident[] Identification Indexes */#define EI_MAG0	     0  /* File identification */#define EI_MAG1	     1  /* File identification */#define EI_MAG2	     2  /* File identification */#define EI_MAG3	     3  /* File identification */#define EI_CLASS     4  /* File class */#define EI_DATA	     5  /* Data encoding */#define EI_VERSION   6  /* File version */#define EI_PAD	     7  /* Start of padding bytes */#define ELFMAG0    0x7f   /* e_ident[EI_MAG0] */#define ELFMAG1    'E'    /* e_ident[EI_MAG1] */#define ELFMAG2    'L'    /* e_ident[EI_MAG2] */#define ELFMAG3    'F'    /* e_ident[EI_MAG3] */#define ELFCLASSNONE       0  /* Invalid class */#define ELFCLASS32         1  /* 32-bit objects */#define ELFCLASS64         2  /* 64-bit objects */#define ELFDATANONE        0  /* Invalid data encoding */#define ELFDATA2LSB        1  /* little-endian */#define ELFDATA2MSB        2  /* big-endian *//* Figure 1-8: Special Section Indexes */#define SHN_UNDEF            0#define SHN_LORESERVE   0xff00#define SHN_LOPROC      0xff00#define SHN_HIPROC      0xff1f#define SHN_ABS         0xfff1#define SHN_COMMON      0xfff2#define SHN_HIRESERVE   0xffff/* Figure 1-9: Section Header */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;} Elf32_Shdr;/* Figure 1-10: Section Types, sh_type */#define SHT_NULL               0#define SHT_PROGBITS           1#define SHT_SYMTAB             2#define SHT_STRTAB	       3#define SHT_RELA	       4#define SHT_HASH	       5#define SHT_DYNAMIC            6#define SHT_NOTE	       7#define SHT_NOBITS	       8#define SHT_REL		       9#define SHT_SHLIB             10#define SHT_DYNSYM            11#define SHT_LOPROC    0x70000000#define SHT_HIPROC    0x7fffffff#define SHT_LOUSER    0x80000000#define SHT_HIUSER    0xffffffff/* Figure 1-12: Section Attribute Flags, sh_flags */#define SHF_WRITE             0x1#define SHF_ALLOC             0x2#define SHF_EXECINSTR         0x4#define SHF_MASKPROC   0xf0000000#define	STN_UNDEF		0/* Figure 1-16: Symbol Table Entry */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;} Elf32_Sym;#define ELF32_ST_BIND(i)	((i)>>4)#define ELF32_ST_TYPE(i)	((i)&0xf)#define ELF32_ST_INFO(b, t)	(((b)<<4)+((t)&0xf))/* Figure 1-17: Symbol Binding, ELF32_ST_BIND */#define STB_LOCAL       0#define STB_GLOBAL      1#define STB_WEAK        2#define STB_LOPROC     13#define STB_HIPROC     15/* Figure 1-18: Symbol Types, ELF32_ST_TYPE */#define STT_NOTYPE       0#define STT_OBJECT       1#define STT_FUNC         2#define STT_SECTION      3#define STT_FILE         4#define STT_LOPROC      13#define STT_HIPROC      15/* Figure 1-20: Relocation Entries */typedef struct {    Elf32_Addr		r_offset;    Elf32_Word		r_info;} Elf32_Rel;typedef struct {    Elf32_Addr		r_offset;    Elf32_Word		r_info;    Elf32_Sword		r_addend;} Elf32_Rela;#define ELF32_R_SYM(i)		((i)>>8)#define ELF32_R_TYPE(i)		((unsigned char)(i))#define ELF32_R_INFO(s, t)	(((s)<<8)+(unsigned char)(t))/* Figure 1-22: Relocation Types */#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/* Figure 2-1: Program Header */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;} Elf32_Phdr;#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/* Figure 2-9: Dynamic Structure */typedef struct {    Elf32_Sword d_tag;    union {        Elf32_Sword	d_val;        Elf32_Addr	d_ptr;    } d_un;} Elf32_Dyn;#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/* * Additional definitions from <elf.h> and <linux/elf.h>. */#undef EI_PAD#define EI_OSABI	7		/* OS ABI identification */#define EI_ABIVERSION	8		/* ABI version */#define EI_PAD		9		/* Byte index of padding bytes */#define ELFOSABI_SYSV		0	/* UNIX System V ABI */#define ELFOSABI_HPUX		1	/* HP-UX */#define ELFOSABI_ARM		97	/* ARM */#define ELFOSABI_STANDALONE	255	/* Standalone (embedded) application */#define EM_486           6              /* Perhaps disused */#define EM_S370		 9		/* Amdahl */#define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */#define EM_MIPS_RS4_BE	10		/* MIPS R4000 big-endian */#define EM_RS6000	11		/* RS6000 */#define EM_PARISC	15		/* HPPA */#define EM_nCUBE	16		/* nCUBE */#define EM_VPP500	17		/* Fujitsu VPP500 */#define EM_SPARC32PLUS	18		/* Sun's "v8plus" */#define EM_960		19		/* Intel 80960 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -