exeelf.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 774 行 · 第 1/3 页
H
774 行
Elf32_Word sh_flags;
Elf32_Addr sh_addr; // starting address of section in image
Elf32_Off sh_offset; // start of section in file
Elf32_Word sh_size; // size of section in file.
Elf32_Word sh_link; // multipurpose field (based on type)
Elf32_Word sh_info; // another multipurpose field (based on type)
Elf32_Word sh_addralign; // address alignment
Elf32_Word sh_entsize; // entry size for sects with fixed sized entries
} Elf32_Shdr;
// section types
#define SHT_NULL 0 // inactive
#define SHT_PROGBITS 1 // meaning defined by program
#define SHT_SYMTAB 2 // symbol table
#define SHT_STRTAB 3 // string table
#define SHT_RELA 4 // reloc entries with explicit addends
#define SHT_HASH 5 // symbol hash table
#define SHT_DYNAMIC 6 // dynamic linking information
#define SHT_NOTE 7 // comment information
#define SHT_NOBITS 8 // like PROGBITS but no space in file.
#define SHT_REL 9 // as RELA but no explicit addends
#define SHT_SHLIB 10 // reserved but evil
#define SHT_DYNSYM 11 // dynamic link symbol table
#define SHT_OS 0x60000001 // info to identify target OS
#define SHT_IMPORTS 0x60000002 // info on refs to external symbols
#define SHT_EXPORTS 0x60000003 // info on symbols exported by ordinal
#define SHT_RES 0x60000004 // read-only resource data.
#define SHT_PROGFRAGS 0x60001001 // similar to SHT_PROGBITS
#define SHT_IDMDLL 0x60001002 // symbol name demangling information
#define SHT_DEFLIB 0x60001003 // default static libraries
#define SHT_LOPROC 0x70000000 // processor specific
#define SHT_HIPROC 0x7fffffff
#define SHT_LOUSER 0x80000000 // user defined sections
#define SHT_HIUSER 0xffffffff
// Old section types. Readers should handle these, writers must use the above
#define SHT_OS_O 12 // info to identify target OS
#define SHT_IMPORTS_O 13 // info on refs to external symbols
#define SHT_EXPORTS_O 14 // info on symbols exported by ordinal
#define SHT_RES_O 15 // read-only resource data.
// sh_flags values
#define SHF_WRITE 0x00000001 // section writable during execution
#define SHF_ALLOC 0x00000002 // section occupies space during exec.
#define SHF_EXECINSTR 0x00000004 // section contains code.
#define SHF_BEGIN 0x01000000 // section to be placed at the beginning
// of like-named sections by static link
#define SHF_END 0x02000000 // same, end.
#define SHF_MASKPROC 0xf0000000 // processor specific flags
// symbol table entry
typedef struct {
Elf32_Word st_name; // symbol name index into string table
Elf32_Addr st_value; // symbol "value"
Elf32_Word st_size; // symbol size
unsigned_8 st_info; // symbol's type and binding attribs.
unsigned_8 st_other; // no meaning yet.
Elf32_Half st_shndx; // section index
} Elf32_Sym;
// symbol info field contents
#define ELF32_ST_BIND(i) ((i)>>4) // get the "bind" subfield
#define ELF32_ST_TYPE(i) ((i)&0xf) // get the type subfield
#define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) // make a new st_info
// bind subfield contents
#define STB_LOCAL 0 // symbol has local binding
#define STB_GLOBAL 1 // symbol has global binding
#define STB_WEAK 2 // symbol has weak binding
#define STB_ENTRY 12 // symbol is entry-point for the load module
#define STB_LOPROC 13 // processor specific semantics
#define STB_HIPROC 15
// type subfield contents
#define STT_NOTYPE 0 // not specified
#define STT_OBJECT 1 // symbol is a data object
#define STT_FUNC 2 // symbol is a code symbol
#define STT_SECTION 3 // symbol associated with a section
#define STT_FILE 4 // symbol gives name of the source file.
#define STT_IMPORT 11 // reference to a symbol in another module
#define STT_LOPROC 13 // processor specific semantics
#define STT_HIPROC 15
// relocation entries
typedef struct {
Elf32_Addr r_offset; // place to apply reloc (from begin of section)
Elf32_Word r_info; // symbol idx, and type of reloc
} Elf32_Rel;
typedef struct {
Elf32_Addr r_offset; // place to apply reloc (from begin of section)
Elf32_Word r_info; // symbol idx, and type of reloc
Elf32_Sword r_addend; // value used as a basis for the reloc.
} Elf32_Rela;
// r_info field contents
#define ELF32_R_SYM(i) ((i)>>8) // gets the symbol index
#define ELF32_R_TYPE(i) ((unsigned_8)(i)) // gets the symbol type
#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned_8)(t)) // make a new r_info
// relocation types.
//386
#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
//PPC
#define R_PPC_NONE 0
#define R_PPC_ADDR32 1
#define R_PPC_ADDR24 2
#define R_PPC_ADDR16 3
#define R_PPC_ADDR16_LO 4
#define R_PPC_ADDR16_HI 5
#define R_PPC_ADDR16_HA 6
#define R_PPC_ADDR14 7
#define R_PPC_ADDR14_BRTAKEN 8
#define R_PPC_ADDR14_BRNTAKEN 9
#define R_PPC_REL24 10
#define R_PPC_REL14 11
#define R_PPC_REL14_BRTAKEN 12
#define R_PPC_REL14_BRNTAKEN 13
#define R_PPC_GOT16 14
#define R_PPC_GOT16_LO 15
#define R_PPC_GOT16_HI 16
#define R_PPC_GOT16_HA 17
#define R_PPC_PLTREL24 18
#define R_PPC_COPY 19
#define R_PPC_GLOB_DAT 20
#define R_PPC_JMP_SLOT 21
#define R_PPC_RELATIVE 22
#define R_PPC_LOCAL24PC 23
#define R_PPC_UADDR32 24
#define R_PPC_UADDR16 25
#define R_PPC_REL32 26
#define R_PPC_PLT32 27
#define R_PPC_PLTREL32 28
#define R_PPC_PLT16_LO 29
#define R_PPC_PLT16_HI 30
#define R_PPC_PLT16_HA 31
#define R_PPC_SDAREL16 32
//M32
#define R_M32_NONE 0
#define R_M32_32 1
#define R_M32_S 2
#define R_M32_PC32_S 3
#define R_M32_GOT32_S 4
#define R_M32_PLT32_S 5
#define R_M32_COPY 6
#define R_M32_GLOB_DAT 7
#define R_M32_JMP_SLOT 8
#define R_M32_RELATIVE 9
#define R_M32_RELATIVE_S 10
//SPARC
#define R_SPARC_NONE 0
#define R_SPARC_8 1
#define R_SPARC_16 2
#define R_SPARC_32 3
#define R_SPARC_DISP8 4
#define R_SPARC_DISP16 5
#define R_SPARC_DISP32 6
#define R_SPARC_WDISP30 7
#define R_SPARC_WDISP22 8
#define R_SPARC_HI22 9
#define R_SPARC_22 10
#define R_SPARC_13 11
#define R_SPARC_LO10 12
#define R_SPARC_GOT10 13
#define R_SPARC_GOT13 14
#define R_SPARC_GOT22 15
#define R_SPARC_PC10 16
#define R_SPARC_PC22 17
#define R_SPARC_WPLT30 18
#define R_SPARC_COPY 19
#define R_SPARC_GLOB_DAT 20
#define R_SPARC_JMP_SLOT 21
#define R_SPARC_RELATIVE 22
#define R_SPARC_UA32 23
#define R_SPARC_PLT32 24
#define R_SPARC_HIPLT22 25
#define R_SPARC_LOPLT10 26
#define R_SPARC_PCPLT32 27
#define R_SPARC_PCPLT22 28
#define R_SPARC_PCPLT10 29
#define R_SPARC_10 30
#define R_SPARC_11 31
#define R_SPARC_WDISP16 40
#define R_SPARC_WDISP19 41
#define R_SPARC_7 43
#define R_SPARC_5 44
#define R_SPARC_6 45
// MIPS
#define R_MIPS_NONE 0
#define R_MIPS_16 1
#define R_MIPS_32 2
#define R_MIPS_REL32 3
#define R_MIPS_26 4
#define R_MIPS_HI16 5
#define R_MIPS_LO16 6
#define R_MIPS_GPREL16 7
#define R_MIPS_LITERAL 8
#define R_MIPS_GOT16 9
#define R_MIPS_PC16 10
#define R_MIPS_CALL16 11
#define R_MIPS_GPREL32 12
#define R_MIPS_GOTHI16 21
#define R_MIPS_GOTLO16 22
#define R_MIPS_CALLHI16 30
#define R_MIPS_CALLLO16 31
// program header
typedef struct {
Elf32_Word p_type; // type of segment
Elf32_Off p_offset; // offset of segment from beginnning of file
Elf32_Addr p_vaddr; // segment virtual address
Elf32_Addr p_paddr; // segment physical address
Elf32_Word p_filesz; // size of segment in file
Elf32_Word p_memsz; // size of segment in memory
Elf32_Word p_flags;
Elf32_Word p_align; // segment align value (in mem & file)
} Elf32_Phdr;
// segment types
#define PT_NULL 0 // unused segment
#define PT_LOAD 1 // loadable segment
#define PT_DYNAMIC 2 // contains dynamic linking information
#define PT_INTERP 3 // reference to a program interpreter
#define PT_NOTE 4 // comments & auxiliary information
#define PT_SHLIB 5 // here be dragons
#define PT_PHDR 6 // address of prog. header in mem (for interp.)
#define PT_OS 0x60000001 // target os information
#define PT_RES 0x60000002 // read-only resource information
#define PT_LOPROC 0x70000000 // processor specific
#define PT_HIPROC 0x7fffffff
// Old segment types. Readers should handle these, writers must use the above
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?