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 + -
显示快捷键?