elf32.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:5k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*-
  2.  * Copyright (c) 1996-1998 John D. Polstra.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  *
  14.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  15.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  18.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  19.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  20.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  21.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24.  * SUCH DAMAGE.
  25.  *
  26.  * $FreeBSD: src/sys/sys/elf32.h,v 1.8 2002/05/30 08:32:18 dfr Exp $
  27.  */
  28. #ifndef _SYS_ELF32_H_
  29. #define _SYS_ELF32_H_ 1
  30. #include <stdint.h>
  31. #include "elf_common.h"
  32. /*
  33.  * ELF definitions common to all 32-bit architectures.
  34.  */
  35. typedef uint32_t Elf32_Addr;
  36. typedef uint16_t Elf32_Half;
  37. typedef uint32_t Elf32_Off;
  38. typedef int32_t Elf32_Sword;
  39. typedef uint32_t Elf32_Word;
  40. typedef uint32_t Elf32_Size;
  41. typedef Elf32_Off Elf32_Hashelt;
  42. /*
  43.  * ELF header.
  44.  */
  45. typedef struct {
  46. unsigned char e_ident[EI_NIDENT]; /* File identification. */
  47. Elf32_Half e_type; /* File type. */
  48. Elf32_Half e_machine; /* Machine architecture. */
  49. Elf32_Word e_version; /* ELF format version. */
  50. Elf32_Addr e_entry; /* Entry point. */
  51. Elf32_Off e_phoff; /* Program header file offset. */
  52. Elf32_Off e_shoff; /* Section header file offset. */
  53. Elf32_Word e_flags; /* Architecture-specific flags. */
  54. Elf32_Half e_ehsize; /* Size of ELF header in bytes. */
  55. Elf32_Half e_phentsize; /* Size of program header entry. */
  56. Elf32_Half e_phnum; /* Number of program header entries. */
  57. Elf32_Half e_shentsize; /* Size of section header entry. */
  58. Elf32_Half e_shnum; /* Number of section header entries. */
  59. Elf32_Half e_shstrndx; /* Section name strings section. */
  60. } Elf32_Ehdr;
  61. /*
  62.  * Section header.
  63.  */
  64. typedef struct {
  65. Elf32_Word sh_name; /* Section name (index into the
  66.    section header string table). */
  67. Elf32_Word sh_type; /* Section type. */
  68. Elf32_Word sh_flags; /* Section flags. */
  69. Elf32_Addr sh_addr; /* Address in memory image. */
  70. Elf32_Off sh_offset; /* Offset in file. */
  71. Elf32_Size sh_size; /* Size in bytes. */
  72. Elf32_Word sh_link; /* Index of a related section. */
  73. Elf32_Word sh_info; /* Depends on section type. */
  74. Elf32_Size sh_addralign; /* Alignment in bytes. */
  75. Elf32_Size sh_entsize; /* Size of each entry in section. */
  76. } Elf32_Shdr;
  77. /*
  78.  * Program header.
  79.  */
  80. typedef struct {
  81. Elf32_Word p_type; /* Entry type. */
  82. Elf32_Off p_offset; /* File offset of contents. */
  83. Elf32_Addr p_vaddr; /* Virtual address in memory image. */
  84. Elf32_Addr p_paddr; /* Physical address (not used). */
  85. Elf32_Size p_filesz; /* Size of contents in file. */
  86. Elf32_Size p_memsz; /* Size of contents in memory. */
  87. Elf32_Word p_flags; /* Access permission flags. */
  88. Elf32_Size p_align; /* Alignment in memory and file. */
  89. } Elf32_Phdr;
  90. /*
  91.  * Dynamic structure.  The ".dynamic" section contains an array of them.
  92.  */
  93. typedef struct {
  94. Elf32_Sword d_tag; /* Entry type. */
  95. union {
  96. Elf32_Size d_val; /* Integer value. */
  97. Elf32_Addr d_ptr; /* Address value. */
  98. } d_un;
  99. } Elf32_Dyn;
  100. /*
  101.  * Relocation entries.
  102.  */
  103. /* Relocations that don't need an addend field. */
  104. typedef struct {
  105. Elf32_Addr r_offset; /* Location to be relocated. */
  106. Elf32_Word r_info; /* Relocation type and symbol index. */
  107. } Elf32_Rel;
  108. /* Relocations that need an addend field. */
  109. typedef struct {
  110. Elf32_Addr r_offset; /* Location to be relocated. */
  111. Elf32_Word r_info; /* Relocation type and symbol index. */
  112. Elf32_Sword r_addend; /* Addend. */
  113. } Elf32_Rela;
  114. /* Macros for accessing the fields of r_info. */
  115. #define ELF32_R_SYM(info) ((info) >> 8)
  116. #define ELF32_R_TYPE(info) ((unsigned char)(info))
  117. /* Macro for constructing r_info from field values. */
  118. #define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type))
  119. /*
  120.  * Symbol table entries.
  121.  */
  122. typedef struct {
  123. Elf32_Word st_name; /* String table index of name. */
  124. Elf32_Addr st_value; /* Symbol value. */
  125. Elf32_Size st_size; /* Size of associated object. */
  126. unsigned char st_info; /* Type and binding information. */
  127. unsigned char st_other; /* Reserved (not used). */
  128. Elf32_Half st_shndx; /* Section index of symbol. */
  129. } Elf32_Sym;
  130. /* Macros for accessing the fields of st_info. */
  131. #define ELF32_ST_BIND(info) ((info) >> 4)
  132. #define ELF32_ST_TYPE(info) ((info) & 0xf)
  133. /* Macro for constructing st_info from field values. */
  134. #define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
  135. #endif /* !_SYS_ELF32_H_ */