exeelf.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 774 行 · 第 1/3 页
H
774 行
/****************************************************************************
*
* Open Watcom Project
*
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
* ========================================================================
*
* This file contains Original Code and/or Modifications of Original
* Code as defined in and that are subject to the Sybase Open Watcom
* Public License version 1.0 (the 'License'). You may not use this file
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
* provided with the Original Code and Modifications, and is also
* available at www.sybase.com/developer/opensource.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
* NON-INFRINGEMENT. Please see the License for the specific language
* governing rights and limitations under the License.
*
* ========================================================================
*
* Description: Executable and Linkable Format (ELF) definitions.
*
****************************************************************************/
#ifndef _EXEELF_H_INCLUDED_
#define _EXEELF_H_INCLUDED_
#ifdef __cplusplus
extern "C" {
#endif
#include <watcom.h>
// ELF scalar data types
typedef unsigned_32 Elf32_Addr;
typedef unsigned_16 Elf32_Half;
typedef unsigned_32 Elf32_Off;
typedef signed_32 Elf32_Sword;
typedef unsigned_32 Elf32_Word;
// the main header
#define EI_NIDENT 16
typedef struct {
unsigned_8 e_ident[EI_NIDENT]; // signature & ID info
Elf32_Half e_type; // file type (i.e. obj file, exe file)
Elf32_Half e_machine; // required architecture
Elf32_Word e_version; // version of the file
Elf32_Addr e_entry; // program entry point
Elf32_Off e_phoff; // program header offset
Elf32_Off e_shoff; // section header offset
Elf32_Word e_flags; // processor specific flags
Elf32_Half e_ehsize; // elf header size
Elf32_Half e_phentsize; // program header entry size
Elf32_Half e_phnum; // number of program header entries
Elf32_Half e_shentsize; // section header entry size
Elf32_Half e_shnum; // number of section header entries
Elf32_Half e_shstrndx; // section name string table index.
// Obselete
/* Elf32_Half e_shosndx; // OS info section index
Elf32_Half e_pad; // to keep header size a word multiple*/
} Elf32_Ehdr;
// e_ident field indicies
#define ELF_SIGNATURE "\177ELF"
#define ELF_SIGNATURE_LEN 4
#define ELFMAG0 '\177' // bytes of signature
#define ELFMAG1 'E' // bytes of signature
#define ELFMAG2 'L' // bytes of signature
#define ELFMAG3 'F' // bytes of signature
#define EI_MAG0 0 // signature bytes
#define EI_MAG1 1 // signature bytes
#define EI_MAG2 2 // signature bytes
#define EI_MAG3 3 // signature bytes
#define EI_CLASS 4 // "file class", i.e. 32-bit vs. 64-bit
#define EI_DATA 5 // data encoding (big-endian vs. little-endian)
#define EI_VERSION 6 // header version #
#define EI_OSABI 7 // OS/ABI identification
#define EI_ABIVERSION 8 // ABI version
#define EI_PAD 9 // start of padding bytes
// contents of the EI_CLASS field index
#define ELFCLASSNONE 0 // invalid class
#define ELFCLASS32 1 // 32-bit objects
#define ELFCLASS64 2 // 64-bit objects
// contents of the EI_DATA field index
#define ELFDATANONE 0 // invalid data encoding
#define ELFDATA2LSB 1 // "little-endian"
#define ELFDATA2MSB 2 // "big-endian"
// the current elf version number (EI_VERSION)
#define EV_CURRENT 1
// contents of the EI_OSABI field index
#define ELFOSABI_NONE 0 // No extensions or unspecified
#define ELFOSABI_HPUX 1 // Hewlett-Packard HP-UX
#define ELFOSABI_NETBSD 2 // NetBSD
#define ELFOSABI_LINUX 3 // Linux
#define ELFOSABI_SOLARIS 6 // Sun Solaris
#define ELFOSABI_AIX 7 // IBM AIX
#define ELFOSABI_IRIX 8 // SGI IRIX
#define ELFOSABI_FREEBSD 9 // FreeBSD
#define ELFOSABI_TRU64 10 // Compaq TRU64 UNIX
#define ELFOSABI_MODESTO 11 // Novell Modesto
#define ELFOSABI_OPENBSD 12 // Open BSD
#define ELFOSABI_OPENVMS 13 // Open VMS
#define ELFOSABI_NSK 14 // Hewlett-Packard Non-Stop Kernel
#define ELFOSABI_AROS 15 // Amiga Research OS
// elf object file types
#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 file types
#define ET_HIPROC 0xffff
// elf machine types
#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 68000
#define EM_88K 5 // Motorola 88000
// was EM_486 6 // Reserved
#define EM_860 7 // Intel 80860
#define EM_MIPS 8 // MIPS I Architecture
#define EM_S370 9 // IBM System/370 Processor
#define EM_MIPS_RS3_LE 10 // MIPS R3000 Little-endian
// 11-14 // Reserved
#define EM_PARISC 15 // Hewlett-Packard PA-RISC
// 16 // Reserved
#define EM_VPP500 17 // Fujitsu VPP500
#define EM_SPARC32PLUS 18 // Enhanced instruction set SPARC
#define EM_960 19 // Intel 80960
#define EM_PPC 20 // PowerPC
#define EM_PPC64 21 // 64-bit PowerPC
#define EM_S390 22 // IBM System/390 Processor
// 23-35 // Reserved
#define EM_V800 36 // NEC V800
#define EM_FR20 37 // Fujitsu FR20
#define EM_RH32 38 // TRW RH-32
#define EM_RCE 39 // Motorola RCE
#define EM_ARM 40 // Advanced RISC Machines ARM
#define EM_ALPHA 41 // Digital Alpha
#define EM_SH 42 // Hitachi SH
#define EM_SPARCV9 43 // SPARC Version 9
#define EM_TRICORE 44 // Siemens TriCore embedded processor
#define EM_ARC 45 // Argonaut RISC Core, Argonaut Technologies Inc.
#define EM_H8_300 46 // Hitachi H8/300
#define EM_H8_300H 47 // Hitachi H8/300H
#define EM_H8S 48 // Hitachi H8S
#define EM_H8_500 49 // Hitachi H8/500
#define EM_IA_64 50 // Intel IA-64 processor architecture
#define EM_MIPS_X 51 // Stanford MIPS-X
#define EM_COLDFIRE 52 // Motorola ColdFire
#define EM_68HC12 53 // Motorola M68HC12
#define EM_MMA 54 // Fujitsu MMA Multimedia Accelerator
#define EM_PCP 55 // Siemens PCP
#define EM_NCPU 56 // Sony nCPU embedded RISC processor
#define EM_NDR1 57 // Denso NDR1 microprocessor
#define EM_STARCORE 58 // Motorola Star*Core processor
#define EM_ME16 59 // Toyota ME16 processor
#define EM_ST100 60 // STMicroelectronics ST100 processor
#define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded processor family
#define EM_X86_64 62 // AMD x86-64 architecture
#define EM_PDSP 63 // Sony DSP Processor
#define EM_PDP10 64 // Digital Equipment Corp. PDP-10
#define EM_PDP11 65 // Digital Equipment Corp. PDP-11
#define EM_FX66 66 // Siemens FX66 microcontroller
#define EM_ST9PLUS 67 // STMicroelectronics ST9+ 8/16 bit microcontroller
#define EM_ST7 68 // STMicroelectronics ST7 8-bit microcontroller
#define EM_68HC16 69 // Motorola MC68HC16 Microcontroller
#define EM_68HC11 70 // Motorola MC68HC11 Microcontroller
#define EM_68HC08 71 // Motorola MC68HC08 Microcontroller
#define EM_68HC05 72 // Motorola MC68HC05 Microcontroller
#define EM_SVX 73 // Silicon Graphics SVx
#define EM_ST19 74 // STMicroelectronics ST19 8-bit microcontroller
#define EM_VAX 75 // Digital VAX
#define EM_CRIS 76 // Axis Communications 32-bit embedded processor
#define EM_JAVELIN 77 // Infineon Technologies 32-bit embedded processor
#define EM_FIREPATH 78 // Element 14 64-bit DSP Processor
#define EM_ZSP 79 // LSI Logic 16-bit DSP Processor
#define EM_MMIX 80 // Donald Knuth's educational 64-bit processor
#define EM_HUANY 81 // Harvard University machine-independent object files
#define EM_PRISM 82 // SiTera Prism
#define EM_AVR 83 // Atmel AVR 8-bit microcontroller
#define EM_FR30 84 // Fujitsu FR30
#define EM_D10V 85 // Mitsubishi D10V
#define EM_D30V 86 // Mitsubishi D30V
#define EM_V850 87 // NEC v850
#define EM_M32R 88 // Mitsubishi M32R
#define EM_MN10300 89 // Matsushita MN10300
#define EM_MN10200 90 // Matsushita MN10200
#define EM_PJ 91 // picoJava
#define EM_OPENRISC 92 // OpenRISC 32-bit embedded processor
#define EM_ARC_A5 93 // ARC Cores Tangent-A5
#define EM_XTENSA 94 // Tensilica Xtensa Architecture
#define EM_VIDEOCORE 95 // Alphamosaic VideoCore processor
#define EM_TMM_GPP 96 // Thomson Multimedia General Purpose Processor
#define EM_NS32K 97 // National Semiconductor 32000 series
#define EM_TPC 98 // Tenor Network TPC processor
#define EM_SNP1K 99 // Trebia SNP 1000 processor
#define EM_ST200 100 // STMicroelectronics (www.st.com) ST200 microcontroller
#define EM_IP2K 101 // Ubicom IP2xxx microcontroller family
#define EM_MAX 102 // MAX Processor
#define EM_CR 103 // National Semiconductor CompactRISC microprocessor
#define EM_F2MC16 104 // Fujitsu F2MC16
#define EM_MSP430 105 // Texas Instruments embedded microcontroller msp430
#define EM_BLACKFIN 106 // Analog Devices Blackfin (DSP) processor
#define EM_SE_C33 107 // S1C33 Family of Seiko Epson processors
#define EM_SEP 108 // Sharp embedded microprocessor
#define EM_ARCA 109 // Arca RISC Microprocessor
#define EM_UNICORE 110 // Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University
// version number info
#define EV_NONE 0
#define EV_CURRENT 1
#define EV_WPIBM 2 // version identifier for extended ELF
// flags (machine specific)
//EM_M32
#define EF_M32_MAU 0x1
// special section indicies
#define SHN_UNDEF 0
#define SHN_LORESERVE 0xff00
#define SHN_LOPROC 0xff00 // reserved for processor-specific semantics
#define SHN_HIPROC 0xff1f
#define SHN_ABS 0xfff1 // references to this section are absolute
#define SHN_COMMON 0xfff2 // references to this section are common.
#define SHN_HIRESERVE 0xffff
// section header
typedef struct {
Elf32_Word sh_name; // name of the section
Elf32_Word sh_type; // section type
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?