📄 elf.h
字号:
/* $Id: elf.h,v 1.2 2002/02/13 11:24:00 pefo Exp $ *//* * Copyright (c) 2001-2002 Opsycon AB (www.opsycon.se / www.opsycon.com) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Opsycon AB, Sweden. * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *//* * ELF data structures and values */typedef unsigned short Elf32_Half;typedef unsigned int Elf32_Word;typedef signed int Elf32_Sword;typedef unsigned int Elf32_Off;typedef unsigned int Elf32_Addr;typedef unsigned char Elf_Char;/* * File Header */#define EI_NIDENT 16typedef struct { Elf_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;/* e_indent */#define EI_MAG0 0 /* File identification byte 0 index */#define EI_MAG1 1 /* File identification byte 1 index */#define EI_MAG2 2 /* File identification byte 2 index */#define EI_MAG3 3 /* File identification byte 3 index */#define EI_CLASS 4 /* File class */#define ELFCLASSNONE 0 /* Invalid class */#define ELFCLASS32 1 /* 32-bit objects */#define ELFCLASS64 2 /* 64-bit objects */#define EI_DATA 5 /* Data encoding */#define ELFDATANONE 0 /* Invalid data encoding */#define ELFDATA2LSB 1 /* 2's complement, little endian */#define ELFDATA2MSB 2 /* 2's complement, big endian */#define EI_VERSION 6 /* File version */#define EI_PAD 7 /* Start of padding bytes */#define ELFMAG0 0x7F /* Magic number byte 0 */#define ELFMAG1 'E' /* Magic number byte 1 */#define ELFMAG2 'L' /* Magic number byte 2 */#define ELFMAG3 'F' /* Magic number byte 3 *//* e_type */#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 *//* e_machine */#define EM_NONE 0 /* No machine */#define EM_M32 1 /* AT&T WE 32100 */#define EM_SPARC 2 /* SUN SPARC */#define EM_386 3 /* Intel 80386 */#define EM_68K 4 /* Motorola m68k family */#define EM_88K 5 /* Motorola m88k family */#define EM_860 7 /* Intel 80860 */#define EM_MIPS 8 /* MIPS R3000 */#define EM_PPC 20 /* PowerPC *//* e_version */#define EV_NONE 0 /* Invalid ELF version */#define EV_CURRENT 1 /* Current version *//* * Program Header */typedef struct { Elf32_Word p_type; /* Identifies program segment type */ Elf32_Off p_offset; /* Segment file offset */ Elf32_Addr p_vaddr; /* Segment virtual address */ Elf32_Addr p_paddr; /* Segment physical address */ Elf32_Word p_filesz; /* Segment size in file */ Elf32_Word p_memsz; /* Segment size in memory */ Elf32_Word p_flags; /* Segment flags */ Elf32_Word p_align; /* Segment alignment, file & memory */} Elf32_Phdr;/* p_type */#define PT_NULL 0 /* Program header table entry unused */#define PT_LOAD 1 /* Loadable program segment */#define PT_DYNAMIC 2 /* Dynamic linking information */#define PT_INTERP 3 /* Program interpreter */#define PT_NOTE 4 /* Auxiliary information */#define PT_SHLIB 5 /* Reserved, unspecified semantics */#define PT_PHDR 6 /* Entry for header table itself */#define PT_LOPROC 0x70000000 /* Processor-specific */#define PT_HIPROC 0x7FFFFFFF /* Processor-specific *//* p_flags */#define PF_X (1 << 0) /* Segment is executable */#define PF_W (1 << 1) /* Segment is writable */#define PF_R (1 << 2) /* Segment is readable */#define PF_MASKPROC 0xF0000000 /* Processor-specific reserved bits *//* * 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;/* sh_type */#define SHT_NULL 0 /* Section header table entry unused */#define SHT_PROGBITS 1 /* Program specific (private) data */#define SHT_SYMTAB 2 /* Link editing symbol table */#define SHT_STRTAB 3 /* A string table */#define SHT_RELA 4 /* Relocation entries with addends */#define SHT_HASH 5 /* A symbol hash table */#define SHT_DYNAMIC 6 /* Information for dynamic linking */#define SHT_NOTE 7 /* Information that marks file */#define SHT_NOBITS 8 /* Section occupies no space in file */#define SHT_REL 9 /* Relocation entries, no addends */#define SHT_SHLIB 10 /* Reserved, unspecified semantics */#define SHT_DYNSYM 11 /* Dynamic linking symbol table */#define SHT_LOPROC 0x70000000 /* Processor-specific semantics, lo */#define SHT_HIPROC 0x7FFFFFFF /* Processor-specific semantics, hi */#define SHT_LOUSER 0x80000000 /* Application-specific semantics */#define SHT_HIUSER 0x8FFFFFFF /* Application-specific semantics *//* sh_flags */#define SHF_WRITE (1 << 0) /* Writable data during execution */#define SHF_ALLOC (1 << 1) /* Occupies memory during execution */#define SHF_EXECINSTR (1 << 2) /* Executable machine instructions */#define SHF_MASKPROC 0xF0000000 /* Processor-specific semantics *//* * Symbol Table */typedef struct { Elf32_Word st_name; Elf32_Addr st_value; Elf32_Word st_size; Elf_Char st_info; Elf_Char st_other; Elf32_Half st_shndx;} Elf32_Sym;#define ELF_ST_BIND(val) (((unsigned int)(val)) >> 4)#define ELF_ST_TYPE(val) ((val) & 0xF)#define ELF_ST_INFO(bind,type) (((bind) << 4) | ((type) & 0xF))/* symbol binding */#define STB_LOCAL 0 /* Symbol not visible outside obj */#define STB_GLOBAL 1 /* Symbol visible outside obj */#define STB_WEAK 2 /* Like globals, lower precedence */#define STB_LOPROC 13 /* Application-specific semantics */#define STB_HIPROC 15 /* Application-specific semantics *//* symbol type */#define STT_NOTYPE 0 /* Symbol type is unspecified */#define STT_OBJECT 1 /* Symbol is a data object */#define STT_FUNC 2 /* Symbol is a code object */#define STT_SECTION 3 /* Symbol associated with a section */#define STT_FILE 4 /* Symbol gives a file name */#define STT_LOPROC 13 /* Application-specific semantics */#define STT_HIPROC 15 /* Application-specific semantics *//* special values st_shndx */#define SHN_UNDEF 0 /* Undefined section reference */#define SHN_LORESERV 0xFF00 /* Begin range of reserved indices */#define SHN_LOPROC 0xFF00 /* Begin range of appl-specific */#define SHN_HIPROC 0xFF1F /* End range of appl-specific */#define SHN_ABS 0xFFF1 /* Associated symbol is absolute */#define SHN_COMMON 0xFFF2 /* Associated symbol is in common */#define SHN_HIRESERVE 0xFFFF /* End range of reserved indices */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -