Changeset 58654 in vbox
- Timestamp:
- Nov 11, 2015 12:21:36 AM (9 years ago)
- File:
-
- 1 copied
-
trunk/include/iprt/formats/pecoff.h (copied) (copied from trunk/src/VBox/Runtime/include/internal/ldrPE.h ) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/formats/pecoff.h
r58653 r58654 1 1 /* $Id$ */ 2 2 /** @file 3 * IPRT - Windows NT PE Structures and Constants.3 * IPRT - Windows NT PE & COFF Structures and Constants. 4 4 */ 5 5 … … 25 25 */ 26 26 27 #ifndef ___i nternal_ldrPE_h28 #define ___i nternal_ldrPE_h27 #ifndef ___iprt_formats_pecoff_h 28 #define ___iprt_formats_pecoff_h 29 29 30 30 #include <iprt/types.h> 31 31 #include <iprt/assert.h> 32 32 33 #pragma pack(4) /** @todo Necessary? */ 34 35 36 /******************************************************************************* 37 * Defined Constants And Macros * 38 *******************************************************************************/ 39 #define IMAGE_NT_SIGNATURE 0x00004550 40 41 /* file header */ 42 #define IMAGE_FILE_MACHINE_I386 0x014c 43 #define IMAGE_FILE_MACHINE_AMD64 0x8664 44 45 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 46 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 47 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 48 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 49 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 50 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 51 #define IMAGE_FILE_16BIT_MACHINE 0x0040 52 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 53 #define IMAGE_FILE_32BIT_MACHINE 0x0100 54 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200 55 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 56 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 57 #define IMAGE_FILE_SYSTEM 0x1000 58 #define IMAGE_FILE_DLL 0x2000 59 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 60 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 61 62 63 /* optional header */ 64 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10B 65 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20B 66 67 #define IMAGE_SUBSYSTEM_UNKNOWN 0x0 68 #define IMAGE_SUBSYSTEM_NATIVE 0x1 69 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 0x2 70 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 0x3 71 #define IMAGE_SUBSYSTEM_OS2_GUI 0x4 72 #define IMAGE_SUBSYSTEM_OS2_CUI 0x5 73 #define IMAGE_SUBSYSTEM_POSIX_CUI 0x7 74 75 #define IMAGE_LIBRARY_PROCESS_INIT 0x0001 76 #define IMAGE_LIBRARY_PROCESS_TERM 0x0002 77 #define IMAGE_LIBRARY_THREAD_INIT 0x0004 78 #define IMAGE_LIBRARY_THREAD_TERM 0x0008 79 #define IMAGE_DLLCHARACTERISTICS_RESERVED 0x0010 80 #define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020 81 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040 82 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 83 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 84 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200 85 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400 86 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800 87 #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000 88 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000 89 #define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000 90 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000 91 92 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 0x10 93 94 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0x0 95 #define IMAGE_DIRECTORY_ENTRY_IMPORT 0x1 96 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 0x2 97 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 0x3 98 #define IMAGE_DIRECTORY_ENTRY_SECURITY 0x4 99 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 0x5 100 #define IMAGE_DIRECTORY_ENTRY_DEBUG 0x6 101 #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 0x7 102 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 103 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 0x8 104 #define IMAGE_DIRECTORY_ENTRY_TLS 0x9 105 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 0xa 106 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 0xb 107 #define IMAGE_DIRECTORY_ENTRY_IAT 0xc 108 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 0xd 109 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 0xe 110 111 112 /* section header */ 113 #define IMAGE_SIZEOF_SHORT_NAME 0x8 114 115 #define IMAGE_SCN_TYPE_REG 0x00000000 116 #define IMAGE_SCN_TYPE_DSECT 0x00000001 117 #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 118 #define IMAGE_SCN_TYPE_GROUP 0x00000004 119 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 120 #define IMAGE_SCN_TYPE_COPY 0x00000010 121 122 #define IMAGE_SCN_CNT_CODE 0x00000020 123 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 124 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 125 126 #define IMAGE_SCN_LNK_OTHER 0x00000100 127 #define IMAGE_SCN_LNK_INFO 0x00000200 128 #define IMAGE_SCN_TYPE_OVER 0x00000400 129 #define IMAGE_SCN_LNK_REMOVE 0x00000800 130 #define IMAGE_SCN_LNK_COMDAT 0x00001000 131 #define IMAGE_SCN_MEM_PROTECTED 0x00004000 132 #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000 133 #define IMAGE_SCN_GPREL 0x00008000 134 #define IMAGE_SCN_MEM_FARDATA 0x00008000 135 #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 136 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000 137 #define IMAGE_SCN_MEM_16BIT 0x00020000 138 #define IMAGE_SCN_MEM_LOCKED 0x00040000 139 #define IMAGE_SCN_MEM_PRELOAD 0x00080000 140 141 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000 142 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000 143 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000 144 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000 145 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 146 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000 147 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000 148 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000 149 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000 150 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 151 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 152 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 153 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 154 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 155 #define IMAGE_SCN_ALIGN_MASK 0x00F00000 156 #define IMAGE_SCN_ALIGN_SHIFT 20 157 158 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 159 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 160 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 161 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 162 #define IMAGE_SCN_MEM_SHARED 0x10000000 163 #define IMAGE_SCN_MEM_EXECUTE 0x20000000 164 #define IMAGE_SCN_MEM_READ 0x40000000 165 #define IMAGE_SCN_MEM_WRITE 0x80000000 166 167 168 /* relocations */ 169 #define IMAGE_REL_BASED_ABSOLUTE 0x0 170 #define IMAGE_REL_BASED_HIGH 0x1 171 #define IMAGE_REL_BASED_LOW 0x2 172 #define IMAGE_REL_BASED_HIGHLOW 0x3 173 #define IMAGE_REL_BASED_HIGHADJ 0x4 174 #define IMAGE_REL_BASED_MIPS_JMPADDR 0x5 175 #define IMAGE_REL_BASED_MIPS_JMPADDR16 0x9 176 #define IMAGE_REL_BASED_IA64_IMM64 0x9 177 #define IMAGE_REL_BASED_DIR64 0xa 178 #define IMAGE_REL_BASED_HIGH3ADJ 0xb 179 180 181 /* imports */ 182 #define IMAGE_ORDINAL_FLAG32 0x80000000 183 #define IMAGE_ORDINAL32(ord) ((ord) & 0xffff) 184 #define IMAGE_SNAP_BY_ORDINAL32(ord) (!!((ord) & IMAGE_ORDINAL_FLAG32)) 185 186 #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL 187 #define IMAGE_ORDINAL64(ord) ((ord) & 0xffff) 188 #define IMAGE_SNAP_BY_ORDINAL64(ord) (!!((ord) & IMAGE_ORDINAL_FLAG64)) 189 190 191 /* debug dir */ 192 #define IMAGE_DEBUG_TYPE_UNKNOWN UINT32_C(0x0) 193 #define IMAGE_DEBUG_TYPE_COFF UINT32_C(0x1) 194 #define IMAGE_DEBUG_TYPE_CODEVIEW UINT32_C(0x2) 195 #define IMAGE_DEBUG_TYPE_FPO UINT32_C(0x3) 196 #define IMAGE_DEBUG_TYPE_MISC UINT32_C(0x4) 197 #define IMAGE_DEBUG_TYPE_EXCEPTION UINT32_C(0x5) 198 #define IMAGE_DEBUG_TYPE_FIXUP UINT32_C(0x6) 199 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC UINT32_C(0x7) 200 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC UINT32_C(0x8) 201 #define IMAGE_DEBUG_TYPE_BORLAND UINT32_C(0x9) 202 #define IMAGE_DEBUG_TYPE_RESERVED10 UINT32_C(0x10) 203 204 #define IMAGE_DEBUG_MISC_EXENAME UINT32_C(1) 205 206 /* security directory */ 207 #define WIN_CERT_REVISION_1_0 UINT16_C(0x0100) 208 #define WIN_CERT_REVISION_2_0 UINT16_C(0x0200) 209 210 #define WIN_CERT_TYPE_X509 UINT16_C(1) 211 #define WIN_CERT_TYPE_PKCS_SIGNED_DATA UINT16_C(2) 212 #define WIN_CERT_TYPE_RESERVED_1 UINT16_C(3) 213 #define WIN_CERT_TYPE_TS_STACK_SIGNED UINT16_C(4) 214 #define WIN_CERT_TYPE_EFI_PKCS115 UINT16_C(0x0ef0) 215 #define WIN_CERT_TYPE_EFI_GUID UINT16_C(0x0ef1) 216 217 /** The alignment of the certificate table. 218 * @remarks Found thru signtool experiments. */ 219 #define WIN_CERTIFICATE_ALIGNMENT 8 220 221 /* For .DBG files. */ 222 #define IMAGE_SEPARATE_DEBUG_SIGNATURE UINT16_C(0x4944) 223 224 #define IMAGE_SIZE_OF_SYMBOL 18 225 #define IMAGE_SIZE_OF_SYMBOL_EX 20 226 227 #define IMAGE_SYM_UNDEFINED INT16_C(0) 228 #define IMAGE_SYM_ABSOLUTE INT16_C(-1) 229 #define IMAGE_SYM_DEBUG INT16_C(-2) 230 231 #define IMAGE_SYM_CLASS_END_OF_FUNCTION UINT8_C(0xff) /* -1 */ 232 #define IMAGE_SYM_CLASS_NULL UINT8_C(0) 233 #define IMAGE_SYM_CLASS_AUTOMATIC UINT8_C(1) 234 #define IMAGE_SYM_CLASS_EXTERNAL UINT8_C(2) 235 #define IMAGE_SYM_CLASS_STATIC UINT8_C(3) 236 #define IMAGE_SYM_CLASS_REGISTER UINT8_C(4) 237 #define IMAGE_SYM_CLASS_EXTERNAL_DEF UINT8_C(5) 238 #define IMAGE_SYM_CLASS_LABEL UINT8_C(6) 239 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL UINT8_C(7) 240 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT UINT8_C(8) 241 #define IMAGE_SYM_CLASS_ARGUMENT UINT8_C(9) 242 #define IMAGE_SYM_CLASS_STRUCT_TAG UINT8_C(10) 243 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION UINT8_C(11) 244 #define IMAGE_SYM_CLASS_UNION_TAG UINT8_C(12) 245 #define IMAGE_SYM_CLASS_TYPE_DEFINITION UINT8_C(13) 246 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC UINT8_C(14) 247 #define IMAGE_SYM_CLASS_ENUM_TAG UINT8_C(15) 248 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM UINT8_C(16) 249 #define IMAGE_SYM_CLASS_REGISTER_PARAM UINT8_C(17) 250 #define IMAGE_SYM_CLASS_BIT_FIELD UINT8_C(18) 251 #define IMAGE_SYM_CLASS_FAR_EXTERNAL UINT8_C(68) 252 #define IMAGE_SYM_CLASS_BLOCK UINT8_C(100) 253 #define IMAGE_SYM_CLASS_FUNCTION UINT8_C(101) 254 #define IMAGE_SYM_CLASS_END_OF_STRUCT UINT8_C(102) 255 #define IMAGE_SYM_CLASS_FILE UINT8_C(103) 256 #define IMAGE_SYM_CLASS_SECTION UINT8_C(104) 257 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL UINT8_C(105) 258 #define IMAGE_SYM_CLASS_CLR_TOKEN UINT8_C(107) 259 260 261 #define IMAGE_SYM_TYPE_NULL UINT16_C(0x0000) 262 #define IMAGE_SYM_TYPE_VOID UINT16_C(0x0001) 263 #define IMAGE_SYM_TYPE_CHAR UINT16_C(0x0002) 264 #define IMAGE_SYM_TYPE_SHORT UINT16_C(0x0003) 265 #define IMAGE_SYM_TYPE_INT UINT16_C(0x0004) 266 #define IMAGE_SYM_TYPE_LONG UINT16_C(0x0005) 267 #define IMAGE_SYM_TYPE_FLOAT UINT16_C(0x0006) 268 #define IMAGE_SYM_TYPE_DOUBLE UINT16_C(0x0007) 269 #define IMAGE_SYM_TYPE_STRUCT UINT16_C(0x0008) 270 #define IMAGE_SYM_TYPE_UNION UINT16_C(0x0009) 271 #define IMAGE_SYM_TYPE_ENUM UINT16_C(0x000a) 272 #define IMAGE_SYM_TYPE_MOE UINT16_C(0x000b) 273 #define IMAGE_SYM_TYPE_BYTE UINT16_C(0x000c) 274 #define IMAGE_SYM_TYPE_WORD UINT16_C(0x000d) 275 #define IMAGE_SYM_TYPE_UINT UINT16_C(0x000e) 276 #define IMAGE_SYM_TYPE_DWORD UINT16_C(0x000f) 277 #define IMAGE_SYM_TYPE_PCODE UINT16_C(0x8000) 278 279 #define IMAGE_SYM_DTYPE_NULL UINT16_C(0x0) 280 #define IMAGE_SYM_DTYPE_POINTER UINT16_C(0x1) 281 #define IMAGE_SYM_DTYPE_FUNCTION UINT16_C(0x2) 282 #define IMAGE_SYM_DTYPE_ARRAY UINT16_C(0x3) 283 284 285 #define N_BTMASK UINT16_C(0x000f) 286 #define N_TMASK UINT16_C(0x0030) 287 #define N_TMASK1 UINT16_C(0x00c0) 288 #define N_TMASK2 UINT16_C(0x00f0) 289 #define N_BTSHFT 4 290 #define N_TSHIFT 2 291 292 #define BTYPE(a_Type) ( (a_Type) & N_BTMASK ) 293 #define ISPTR(a_Type) ( ((a_Type) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT) ) 294 #define ISFCN(a_Type) ( ((a_Type) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT) ) 295 #define ISARY(a_Type) ( ((a_Type) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT) ) 296 #define ISTAG(a_StorageClass) ( (a_StorageClass) == IMAGE_SYM_CLASS_STRUCT_TAG \ 297 || (a_StorageClass) == IMAGE_SYM_CLASS_UNION_TAG \ 298 || (a_StorageClass) == IMAGE_SYM_CLASS_ENUM_TAG ) 299 300 301 /******************************************************************************* 302 * Structures and Typedefs * 303 *******************************************************************************/ 33 34 /** @defgroup grp_rt_formats_pecoff PE & Microsoft COFF structurs and definitions 35 * @ingroup grp_rt_formats 36 * @{ 37 */ 38 39 40 /** 41 * PE & COFF file header. 42 * 43 * This starts COFF files, while in PE files it's preceeded by the PE signature 44 * (see IMAGE_NT_HEADERS32, IMAGE_NT_HEADERS64). 45 */ 304 46 typedef struct _IMAGE_FILE_HEADER 305 47 { 306 48 uint16_t Machine; /**< 0x00 */ 307 49 uint16_t NumberOfSections; /**< 0x02 */ 308 uint32_t TimeDateStamp; /**< 0x04 */309 uint32_t PointerToSymbolTable; /**< 0x08 */310 uint32_t NumberOfSymbols; /**< 0x0c */311 uint16_t SizeOfOptionalHeader; /**< 0x10 */50 uint32_t TimeDateStamp; /**< 0x04 */ 51 uint32_t PointerToSymbolTable; /**< 0x08 */ 52 uint32_t NumberOfSymbols; /**< 0x0c */ 53 uint16_t SizeOfOptionalHeader; /**< 0x10 */ 312 54 uint16_t Characteristics; /**< 0x12 */ 313 55 } IMAGE_FILE_HEADER; /* size: 0x14 */ … … 317 59 318 60 61 /** @name PE & COFF machine types. 62 * Used by IMAGE_FILE_HEADER::Machine and IMAGE_SEPARATE_DEBUG_HEADER::Machine. 63 * @{ */ 64 #define IMAGE_FILE_MACHINE_I386 UINT16_C(0x014c) 65 #define IMAGE_FILE_MACHINE_AMD64 UINT16_C(0x8664) 66 /** @} */ 67 68 /** @name File header characteristics (IMAGE_FILE_HEADER::Characteristics) 69 * @{ */ 70 #define IMAGE_FILE_RELOCS_STRIPPED UINT16_C(0x0001) 71 #define IMAGE_FILE_EXECUTABLE_IMAGE UINT16_C(0x0002) 72 #define IMAGE_FILE_LINE_NUMS_STRIPPED UINT16_C(0x0004) 73 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED UINT16_C(0x0008) 74 #define IMAGE_FILE_AGGRESIVE_WS_TRIM UINT16_C(0x0010) 75 #define IMAGE_FILE_LARGE_ADDRESS_AWARE UINT16_C(0x0020) 76 #define IMAGE_FILE_16BIT_MACHINE UINT16_C(0x0040) 77 #define IMAGE_FILE_BYTES_REVERSED_LO UINT16_C(0x0080) 78 #define IMAGE_FILE_32BIT_MACHINE UINT16_C(0x0100) 79 #define IMAGE_FILE_DEBUG_STRIPPED UINT16_C(0x0200) 80 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP UINT16_C(0x0400) 81 #define IMAGE_FILE_NET_RUN_FROM_SWAP UINT16_C(0x0800) 82 #define IMAGE_FILE_SYSTEM UINT16_C(0x1000) 83 #define IMAGE_FILE_DLL UINT16_C(0x2000) 84 #define IMAGE_FILE_UP_SYSTEM_ONLY UINT16_C(0x4000) 85 #define IMAGE_FILE_BYTES_REVERSED_HI UINT16_C(0x8000) 86 /** @} */ 87 88 89 /** 90 * PE data directory. 91 * 92 * This is used to locate data in the loaded image so the dynamic linker or 93 * others can make use of it. However, in the case of 94 * IMAGE_DIRECTORY_ENTRY_SECURITY it is referring to raw file offsets. 95 */ 319 96 typedef struct _IMAGE_DATA_DIRECTORY 320 97 { … … 322 99 uint32_t Size; 323 100 } IMAGE_DATA_DIRECTORY; 101 AssertCompileSize(IMAGE_DATA_DIRECTORY, 0x8); 324 102 typedef IMAGE_DATA_DIRECTORY *PIMAGE_DATA_DIRECTORY; 325 103 typedef IMAGE_DATA_DIRECTORY const *PCIMAGE_DATA_DIRECTORY; 326 104 327 105 /** The standard number of data directories in the optional header. 106 * I.e. the dimensions of IMAGE_OPTIONAL_HEADER32::DataDirectory and 107 * IMAGE_OPTIONAL_HEADER64::DataDirectory. 108 */ 109 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 0x10 110 111 112 /** 113 * PE optional header, 32-bit version. 114 */ 328 115 typedef struct _IMAGE_OPTIONAL_HEADER32 329 116 { … … 364 151 typedef IMAGE_OPTIONAL_HEADER32 const *PCIMAGE_OPTIONAL_HEADER32; 365 152 153 /** 154 * PE optional header, 64-bit version. 155 */ 366 156 typedef struct _IMAGE_OPTIONAL_HEADER64 367 157 { … … 397 187 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; /**< 0x70; 0x10*8 = 0x80 */ 398 188 } IMAGE_OPTIONAL_HEADER64; /* size: 0xf0 */ 189 AssertCompileSize(IMAGE_OPTIONAL_HEADER64, 0xf0); 399 190 typedef IMAGE_OPTIONAL_HEADER64 *PIMAGE_OPTIONAL_HEADER64; 400 191 typedef IMAGE_OPTIONAL_HEADER64 const *PCIMAGE_OPTIONAL_HEADER64; 401 192 402 403 typedef struct _IMAGE_NT_HEADERS 193 /** @name Optional header magic values. 194 * @{ */ 195 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC UINT16_C(0x010b) 196 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC UINT16_C(0x020b) 197 /** @} */ 198 199 /** @name IMAGE_SUBSYSTEM_XXX - Optional header subsystems. 200 * IMAGE_OPTIONAL_HEADER32::Subsystem, IMAGE_OPTIONAL_HEADER64::Subsystem 201 * @{ */ 202 #define IMAGE_SUBSYSTEM_UNKNOWN UINT16_C(0x0000) 203 #define IMAGE_SUBSYSTEM_NATIVE UINT16_C(0x0001) 204 #define IMAGE_SUBSYSTEM_WINDOWS_GUI UINT16_C(0x0002) 205 #define IMAGE_SUBSYSTEM_WINDOWS_CUI UINT16_C(0x0003) 206 #define IMAGE_SUBSYSTEM_OS2_GUI UINT16_C(0x0004) 207 #define IMAGE_SUBSYSTEM_OS2_CUI UINT16_C(0x0005) 208 #define IMAGE_SUBSYSTEM_POSIX_CUI UINT16_C(0x0007) 209 /** @} */ 210 211 /** @name Optional header characteristics. 212 * @{ */ 213 #define IMAGE_LIBRARY_PROCESS_INIT UINT16_C(0x0001) 214 #define IMAGE_LIBRARY_PROCESS_TERM UINT16_C(0x0002) 215 #define IMAGE_LIBRARY_THREAD_INIT UINT16_C(0x0004) 216 #define IMAGE_LIBRARY_THREAD_TERM UINT16_C(0x0008) 217 #define IMAGE_DLLCHARACTERISTICS_RESERVED UINT16_C(0x0010) 218 #define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA UINT16_C(0x0020) 219 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE UINT16_C(0x0040) 220 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY UINT16_C(0x0080) 221 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT UINT16_C(0x0100) 222 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION UINT16_C(0x0200) 223 #define IMAGE_DLLCHARACTERISTICS_NO_SEH UINT16_C(0x0400) 224 #define IMAGE_DLLCHARACTERISTICS_NO_BIND UINT16_C(0x0800) 225 #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER UINT16_C(0x1000) 226 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER UINT16_C(0x2000) 227 #define IMAGE_DLLCHARACTERISTICS_GUARD_CF UINT16_C(0x4000) 228 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE UINT16_C(0x8000) 229 /** @} */ 230 231 232 /** @name IMAGE_DIRECTORY_ENTRY_XXX - Data directory indexes. 233 * Used to index IMAGE_OPTIONAL_HEADER32::DataDirectory and 234 * IMAGE_OPTIONAL_HEADER64::DataDirectory 235 * @{ */ 236 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0x0 237 #define IMAGE_DIRECTORY_ENTRY_IMPORT 0x1 238 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 0x2 239 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 0x3 240 #define IMAGE_DIRECTORY_ENTRY_SECURITY 0x4 241 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 0x5 242 #define IMAGE_DIRECTORY_ENTRY_DEBUG 0x6 243 #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 0x7 244 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 245 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 0x8 246 #define IMAGE_DIRECTORY_ENTRY_TLS 0x9 247 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 0xa 248 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 0xb 249 #define IMAGE_DIRECTORY_ENTRY_IAT 0xc 250 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 0xd 251 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 0xe 252 /** @} */ 253 254 255 /** 256 * PE (NT) headers, 32-bit version. 257 */ 258 typedef struct _IMAGE_NT_HEADERS32 404 259 { 405 260 uint32_t Signature; /**< 0x00 */ … … 413 268 typedef IMAGE_NT_HEADERS32 const *PCIMAGE_NT_HEADERS32; 414 269 270 /** 271 * PE (NT) headers, 64-bit version. 272 */ 415 273 typedef struct _IMAGE_NT_HEADERS64 416 274 { … … 425 283 typedef IMAGE_NT_HEADERS64 const *PCIMAGE_NT_HEADERS64; 426 284 427 285 /** The PE signature. 286 * Used by IMAGE_NT_HEADERS32::Signature, IMAGE_NT_HEADERS64::Signature. */ 287 #define IMAGE_NT_SIGNATURE UINT32_C(0x00004550) 288 289 290 /** Section header short name length (IMAGE_SECTION_HEADER::Name). */ 291 #define IMAGE_SIZEOF_SHORT_NAME 0x8 292 293 /** 294 * PE & COFF section header. 295 */ 428 296 typedef struct _IMAGE_SECTION_HEADER 429 297 { … … 443 311 uint32_t Characteristics; 444 312 } IMAGE_SECTION_HEADER; 313 AssertCompileSize(IMAGE_SECTION_HEADER, 40); 445 314 typedef IMAGE_SECTION_HEADER *PIMAGE_SECTION_HEADER; 446 315 typedef IMAGE_SECTION_HEADER const *PCIMAGE_SECTION_HEADER; 447 316 448 317 /** @name IMAGE_SCN_XXX - Section header characteristics. 318 * Used by IMAGE_SECTION_HEADER::Characteristics. 319 * @{ */ 320 #define IMAGE_SCN_TYPE_REG UINT32_C(0x00000000) 321 #define IMAGE_SCN_TYPE_DSECT UINT32_C(0x00000001) 322 #define IMAGE_SCN_TYPE_NOLOAD UINT32_C(0x00000002) 323 #define IMAGE_SCN_TYPE_GROUP UINT32_C(0x00000004) 324 #define IMAGE_SCN_TYPE_NO_PAD UINT32_C(0x00000008) 325 #define IMAGE_SCN_TYPE_COPY UINT32_C(0x00000010) 326 327 #define IMAGE_SCN_CNT_CODE UINT32_C(0x00000020) 328 #define IMAGE_SCN_CNT_INITIALIZED_DATA UINT32_C(0x00000040) 329 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA UINT32_C(0x00000080) 330 331 #define IMAGE_SCN_LNK_OTHER UINT32_C(0x00000100) 332 #define IMAGE_SCN_LNK_INFO UINT32_C(0x00000200) 333 #define IMAGE_SCN_TYPE_OVER UINT32_C(0x00000400) 334 #define IMAGE_SCN_LNK_REMOVE UINT32_C(0x00000800) 335 #define IMAGE_SCN_LNK_COMDAT UINT32_C(0x00001000) 336 #define IMAGE_SCN_MEM_PROTECTED UINT32_C(0x00004000) 337 #define IMAGE_SCN_NO_DEFER_SPEC_EXC UINT32_C(0x00004000) 338 #define IMAGE_SCN_GPREL UINT32_C(0x00008000) 339 #define IMAGE_SCN_MEM_FARDATA UINT32_C(0x00008000) 340 #define IMAGE_SCN_MEM_SYSHEAP UINT32_C(0x00010000) 341 #define IMAGE_SCN_MEM_PURGEABLE UINT32_C(0x00020000) 342 #define IMAGE_SCN_MEM_16BIT UINT32_C(0x00020000) 343 #define IMAGE_SCN_MEM_LOCKED UINT32_C(0x00040000) 344 #define IMAGE_SCN_MEM_PRELOAD UINT32_C(0x00080000) 345 346 #define IMAGE_SCN_ALIGN_1BYTES UINT32_C(0x00100000) 347 #define IMAGE_SCN_ALIGN_2BYTES UINT32_C(0x00200000) 348 #define IMAGE_SCN_ALIGN_4BYTES UINT32_C(0x00300000) 349 #define IMAGE_SCN_ALIGN_8BYTES UINT32_C(0x00400000) 350 #define IMAGE_SCN_ALIGN_16BYTES UINT32_C(0x00500000) 351 #define IMAGE_SCN_ALIGN_32BYTES UINT32_C(0x00600000) 352 #define IMAGE_SCN_ALIGN_64BYTES UINT32_C(0x00700000) 353 #define IMAGE_SCN_ALIGN_128BYTES UINT32_C(0x00800000) 354 #define IMAGE_SCN_ALIGN_256BYTES UINT32_C(0x00900000) 355 #define IMAGE_SCN_ALIGN_512BYTES UINT32_C(0x00A00000) 356 #define IMAGE_SCN_ALIGN_1024BYTES UINT32_C(0x00B00000) 357 #define IMAGE_SCN_ALIGN_2048BYTES UINT32_C(0x00C00000) 358 #define IMAGE_SCN_ALIGN_4096BYTES UINT32_C(0x00D00000) 359 #define IMAGE_SCN_ALIGN_8192BYTES UINT32_C(0x00E00000) 360 #define IMAGE_SCN_ALIGN_MASK UINT32_C(0x00F00000) 361 #define IMAGE_SCN_ALIGN_SHIFT 20 362 363 #define IMAGE_SCN_LNK_NRELOC_OVFL UINT32_C(0x01000000) 364 #define IMAGE_SCN_MEM_DISCARDABLE UINT32_C(0x02000000) 365 #define IMAGE_SCN_MEM_NOT_CACHED UINT32_C(0x04000000) 366 #define IMAGE_SCN_MEM_NOT_PAGED UINT32_C(0x08000000) 367 #define IMAGE_SCN_MEM_SHARED UINT32_C(0x10000000) 368 #define IMAGE_SCN_MEM_EXECUTE UINT32_C(0x20000000) 369 #define IMAGE_SCN_MEM_READ UINT32_C(0x40000000) 370 #define IMAGE_SCN_MEM_WRITE UINT32_C(0x80000000) 371 /** @} */ 372 373 374 /** 375 * PE image base relocations block header. 376 * 377 * This found in IMAGE_DIRECTORY_ENTRY_BASERELOC. Each entry is follow 378 * immediately by an array of 16-bit words, where the lower 12-bits are used 379 * for the page offset and the upper 4-bits for the base relocation type 380 * (IMAGE_REL_BASE_XXX). The block should be padded with 381 * IMAGE_REL_BASED_ABSOLUTE entries to ensure 32-bit alignment of this header. 382 */ 449 383 typedef struct _IMAGE_BASE_RELOCATION 450 384 { 385 /** The RVA of the page/block the following ase relocations applies to. */ 451 386 uint32_t VirtualAddress; 387 /** The size of this relocation block, including this header. */ 452 388 uint32_t SizeOfBlock; 453 389 } IMAGE_BASE_RELOCATION; 390 AssertCompileSize(IMAGE_BASE_RELOCATION, 8); 454 391 typedef IMAGE_BASE_RELOCATION *PIMAGE_BASE_RELOCATION; 455 392 typedef IMAGE_BASE_RELOCATION const *PCIMAGE_BASE_RELOCATION; 456 393 457 394 /** @name IMAGE_REL_BASED_XXX - PE base relocations. 395 * Found in the IMAGE_DIRECTORY_ENTRY_BASERELOC data directory. 396 * @{ */ 397 #define IMAGE_REL_BASED_ABSOLUTE UINT16_C(0x0) 398 #define IMAGE_REL_BASED_HIGH UINT16_C(0x1) 399 #define IMAGE_REL_BASED_LOW UINT16_C(0x2) 400 #define IMAGE_REL_BASED_HIGHLOW UINT16_C(0x3) 401 #define IMAGE_REL_BASED_HIGHADJ UINT16_C(0x4) 402 #define IMAGE_REL_BASED_MIPS_JMPADDR UINT16_C(0x5) 403 #define IMAGE_REL_BASED_MIPS_JMPADDR16 UINT16_C(0x9) 404 #define IMAGE_REL_BASED_IA64_IMM64 UINT16_C(0x9) 405 #define IMAGE_REL_BASED_DIR64 UINT16_C(0xa) 406 #define IMAGE_REL_BASED_HIGH3ADJ UINT16_C(0xb) 407 /** @} */ 408 409 /** 410 * PE export directory entry. 411 */ 458 412 typedef struct _IMAGE_EXPORT_DIRECTORY 459 413 { … … 470 424 uint32_t AddressOfNameOrdinals; 471 425 } IMAGE_EXPORT_DIRECTORY; 426 AssertCompileSize(IMAGE_EXPORT_DIRECTORY, 40); 472 427 typedef IMAGE_EXPORT_DIRECTORY *PIMAGE_EXPORT_DIRECTORY; 473 428 typedef IMAGE_EXPORT_DIRECTORY const *PCIMAGE_EXPORT_DIRECTORY; 474 429 475 430 431 /** 432 * PE import directory entry. 433 */ 476 434 typedef struct _IMAGE_IMPORT_DESCRIPTOR 477 435 { … … 486 444 uint32_t FirstThunk; 487 445 } IMAGE_IMPORT_DESCRIPTOR; 446 AssertCompileSize(IMAGE_IMPORT_DESCRIPTOR, 20); 488 447 typedef IMAGE_IMPORT_DESCRIPTOR *PIMAGE_IMPORT_DESCRIPTOR; 489 448 typedef IMAGE_IMPORT_DESCRIPTOR const *PCIMAGE_IMPORT_DESCRIPTOR; 490 449 491 450 /** 451 * Something we currently don't make use of... 452 */ 492 453 typedef struct _IMAGE_IMPORT_BY_NAME 493 454 { … … 495 456 uint8_t Name[1]; 496 457 } IMAGE_IMPORT_BY_NAME; 458 AssertCompileSize(IMAGE_IMPORT_BY_NAME, 4); 497 459 typedef IMAGE_IMPORT_BY_NAME *PIMAGE_IMPORT_BY_NAME; 498 460 typedef IMAGE_IMPORT_BY_NAME const *PCIMAGE_IMPORT_BY_NAME; 499 461 500 462 501 /* The image_thunk_data32/64 structures are not very helpful except for getting RSI. keep them around till all the code has been converted. */ 463 #if 0 464 /* The image_thunk_data32/64 structures are not very helpful except for getting RSI. 465 keep them around till all the code has been converted. */ 502 466 typedef struct _IMAGE_THUNK_DATA64 503 467 { … … 525 489 typedef IMAGE_THUNK_DATA32 *PIMAGE_THUNK_DATA32; 526 490 typedef IMAGE_THUNK_DATA32 const *PCIMAGE_THUNK_DATA32; 527 528 529 530 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 531 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 532 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 533 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 534 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 535 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 536 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 537 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 538 /* WARNING! NO MORE PRAGMA PACK 4 from here on. Assert size of all new types. */ 539 #pragma pack() 540 491 #endif 492 493 /** @name PE import directory macros. 494 * @{ */ 495 #define IMAGE_ORDINAL_FLAG32 UINT32_C(0x80000000) 496 #define IMAGE_ORDINAL32(ord) ((ord) & UINT32_C(0xffff)) 497 #define IMAGE_SNAP_BY_ORDINAL32(ord) (!!((ord) & IMAGE_ORDINAL_FLAG32)) 498 499 #define IMAGE_ORDINAL_FLAG64 UINT64_C(0x8000000000000000) 500 #define IMAGE_ORDINAL64(ord) ((ord) & UINT32_C(0xffff)) 501 #define IMAGE_SNAP_BY_ORDINAL64(ord) (!!((ord) & IMAGE_ORDINAL_FLAG64)) 502 /** @} */ 503 504 /** @name Image load config directories 505 * @{ */ 541 506 542 507 /** @since Windows 10 (preview 9879) */ … … 775 740 typedef PCIMAGE_LOAD_CONFIG_DIRECTORY64_V4 PCIMAGE_LOAD_CONFIG_DIRECTORY64; 776 741 777 742 /** @} */ 743 744 745 /** 746 * PE certificate directory. 747 * 748 * Found in IMAGE_DIRECTORY_ENTRY_SECURITY. 749 */ 750 typedef struct WIN_CERTIFICATE 751 { 752 uint32_t dwLength; 753 uint16_t wRevision; 754 uint16_t wCertificateType; 755 uint8_t bCertificate[8]; 756 } WIN_CERTIFICATE; 757 AssertCompileSize(WIN_CERTIFICATE, 16); 758 typedef WIN_CERTIFICATE *PWIN_CERTIFICATE; 759 typedef WIN_CERTIFICATE const *PCWIN_CERTIFICATE; 760 761 /** @name WIN_CERT_REVISION_XXX - Certificate data directory revision. 762 * Used WIN_CERTIFICATE::wRevision found in the 763 * IMAGE_DIRECTORY_ENTRY_SECURITY data directory. */ 764 #define WIN_CERT_REVISION_1_0 UINT16_C(0x0100) 765 #define WIN_CERT_REVISION_2_0 UINT16_C(0x0200) 766 /** @} */ 767 768 /** @name WIN_CERT_TYPE_XXX - Signature type. 769 * Used by WIN_CERTIFICATE::wCertificateType. 770 * @{ */ 771 #define WIN_CERT_TYPE_X509 UINT16_C(1) 772 #define WIN_CERT_TYPE_PKCS_SIGNED_DATA UINT16_C(2) 773 #define WIN_CERT_TYPE_RESERVED_1 UINT16_C(3) 774 #define WIN_CERT_TYPE_TS_STACK_SIGNED UINT16_C(4) 775 #define WIN_CERT_TYPE_EFI_PKCS115 UINT16_C(0x0ef0) 776 #define WIN_CERT_TYPE_EFI_GUID UINT16_C(0x0ef1) 777 /** @} */ 778 779 /** The alignment of the certificate table. 780 * @remarks Found thru signtool experiments. */ 781 #define WIN_CERTIFICATE_ALIGNMENT UINT32_C(8) 782 783 784 /** 785 * Debug directory. 786 * 787 * Found in IMAGE_DIRECTORY_ENTRY_DEBUG. 788 */ 778 789 typedef struct _IMAGE_DEBUG_DIRECTORY 779 790 { … … 791 802 typedef IMAGE_DEBUG_DIRECTORY const *PCIMAGE_DEBUG_DIRECTORY; 792 803 804 /** @name IMAGE_DEBUG_TYPE_XXX - Debug format types. 805 * Used by IMAGE_DEBUG_DIRECTORY::Type. 806 * @{ */ 807 #define IMAGE_DEBUG_TYPE_UNKNOWN UINT32_C(0x0) 808 #define IMAGE_DEBUG_TYPE_COFF UINT32_C(0x1) 809 #define IMAGE_DEBUG_TYPE_CODEVIEW UINT32_C(0x2) 810 #define IMAGE_DEBUG_TYPE_FPO UINT32_C(0x3) 811 #define IMAGE_DEBUG_TYPE_MISC UINT32_C(0x4) 812 #define IMAGE_DEBUG_TYPE_EXCEPTION UINT32_C(0x5) 813 #define IMAGE_DEBUG_TYPE_FIXUP UINT32_C(0x6) 814 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC UINT32_C(0x7) 815 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC UINT32_C(0x8) 816 #define IMAGE_DEBUG_TYPE_BORLAND UINT32_C(0x9) 817 #define IMAGE_DEBUG_TYPE_RESERVED10 UINT32_C(0x10) 818 /** @} */ 819 820 /** @name IMAGE_DEBUG_MISC_XXX - Misc debug data type. 821 * Used by IMAGE_DEBUG_MISC::DataType. 822 * @{ */ 823 #define IMAGE_DEBUG_MISC_EXENAME UINT32_C(1) 824 /** @} */ 825 826 827 /** 828 * The format of IMAGE_DEBUG_TYPE_MISC debug info. 829 */ 793 830 typedef struct _IMAGE_DEBUG_MISC 794 831 { … … 804 841 805 842 806 typedef struct WIN_CERTIFICATE 807 { 808 uint32_t dwLength; 809 uint16_t wRevision; 810 uint16_t wCertificateType; 811 uint8_t bCertificate[8]; 812 } WIN_CERTIFICATE; 813 AssertCompileSize(WIN_CERTIFICATE, 16); 814 typedef WIN_CERTIFICATE *PWIN_CERTIFICATE; 815 typedef WIN_CERTIFICATE const *PCWIN_CERTIFICATE; 816 817 818 /** The header of a .DBG file (NT4). */ 843 844 /** 845 * The header of a .DBG file (NT4). 846 */ 819 847 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER 820 848 { … … 837 865 typedef IMAGE_SEPARATE_DEBUG_HEADER const *PCIMAGE_SEPARATE_DEBUG_HEADER; 838 866 839 867 /** The signature of a IMAGE_SEPARATE_DEBUG_HEADER. */ 868 #define IMAGE_SEPARATE_DEBUG_SIGNATURE UINT16_C(0x4944) 869 870 871 /** 872 * The format of IMAGE_DEBUG_TYPE_COFF debug info. 873 */ 840 874 typedef struct _IMAGE_COFF_SYMBOLS_HEADER 841 875 { … … 854 888 855 889 890 /** 891 * Line number format of IMAGE_DEBUG_TYPE_COFF debug info. 892 * 893 * @remarks This has misaligned members. 894 */ 856 895 #pragma pack(2) 857 896 typedef struct _IMAGE_LINENUMBER … … 870 909 871 910 911 /** The size of a IMAGE_SYMBOL & IMAGE_AUX_SYMBOL structure. */ 912 #define IMAGE_SIZE_OF_SYMBOL 18 913 /** The size of a IMAGE_SYMBOL_EX & IMAGE_AUX_SYMBOL_EX structure. */ 914 #define IMAGE_SIZE_OF_SYMBOL_EX 20 915 916 /** 917 * COFF symbol. 918 */ 872 919 #pragma pack(2) 873 920 typedef struct _IMAGE_SYMBOL … … 895 942 typedef IMAGE_SYMBOL const *PCIMAGE_SYMBOL; 896 943 897 944 /** 945 * COFF auxiliary symbol token defintion (whatever that is). 946 */ 898 947 #pragma pack(2) 899 948 typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF … … 909 958 typedef IMAGE_AUX_SYMBOL_TOKEN_DEF const *PCIMAGE_AUX_SYMBOL_TOKEN_DEF; 910 959 911 960 /** 961 * COFF auxiliary symbol. 962 */ 912 963 #pragma pack(1) 913 964 typedef union _IMAGE_AUX_SYMBOL … … 969 1020 970 1021 971 1022 /** 1023 * Extended COFF symbol. 1024 */ 972 1025 typedef struct _IMAGE_SYMBOL_EX 973 1026 { … … 993 1046 typedef IMAGE_SYMBOL_EX const *PCIMAGE_SYMBOL_EX; 994 1047 995 1048 /** 1049 * Extended COFF auxiliary symbol. 1050 */ 996 1051 typedef union _IMAGE_AUX_SYMBOL_EX 997 1052 { … … 1033 1088 typedef IMAGE_AUX_SYMBOL_EX const *PCIMAGE_AUX_SYMBOL_EX; 1034 1089 1090 /** @name Special COFF section numbers. 1091 * Used by IMAGE_SYMBOL::SectionNumber and IMAGE_SYMBOL_EX::SectionNumber 1092 * @{ */ 1093 #define IMAGE_SYM_UNDEFINED INT16_C(0) 1094 #define IMAGE_SYM_ABSOLUTE INT16_C(-1) 1095 #define IMAGE_SYM_DEBUG INT16_C(-2) 1096 /** @} */ 1097 1098 /** @name IMAGE_SYM_CLASS_XXX - COFF symbol storage classes. 1099 * @{ */ 1100 #define IMAGE_SYM_CLASS_END_OF_FUNCTION UINT8_C(0xff) /* -1 */ 1101 #define IMAGE_SYM_CLASS_NULL UINT8_C(0) 1102 #define IMAGE_SYM_CLASS_AUTOMATIC UINT8_C(1) 1103 #define IMAGE_SYM_CLASS_EXTERNAL UINT8_C(2) 1104 #define IMAGE_SYM_CLASS_STATIC UINT8_C(3) 1105 #define IMAGE_SYM_CLASS_REGISTER UINT8_C(4) 1106 #define IMAGE_SYM_CLASS_EXTERNAL_DEF UINT8_C(5) 1107 #define IMAGE_SYM_CLASS_LABEL UINT8_C(6) 1108 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL UINT8_C(7) 1109 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT UINT8_C(8) 1110 #define IMAGE_SYM_CLASS_ARGUMENT UINT8_C(9) 1111 #define IMAGE_SYM_CLASS_STRUCT_TAG UINT8_C(10) 1112 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION UINT8_C(11) 1113 #define IMAGE_SYM_CLASS_UNION_TAG UINT8_C(12) 1114 #define IMAGE_SYM_CLASS_TYPE_DEFINITION UINT8_C(13) 1115 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC UINT8_C(14) 1116 #define IMAGE_SYM_CLASS_ENUM_TAG UINT8_C(15) 1117 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM UINT8_C(16) 1118 #define IMAGE_SYM_CLASS_REGISTER_PARAM UINT8_C(17) 1119 #define IMAGE_SYM_CLASS_BIT_FIELD UINT8_C(18) 1120 #define IMAGE_SYM_CLASS_FAR_EXTERNAL UINT8_C(68) 1121 #define IMAGE_SYM_CLASS_BLOCK UINT8_C(100) 1122 #define IMAGE_SYM_CLASS_FUNCTION UINT8_C(101) 1123 #define IMAGE_SYM_CLASS_END_OF_STRUCT UINT8_C(102) 1124 #define IMAGE_SYM_CLASS_FILE UINT8_C(103) 1125 #define IMAGE_SYM_CLASS_SECTION UINT8_C(104) 1126 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL UINT8_C(105) 1127 #define IMAGE_SYM_CLASS_CLR_TOKEN UINT8_C(107) 1128 /** @} */ 1129 1130 /** @name IMAGE_SYM_TYPE_XXX - COFF symbol base types 1131 * @{ */ 1132 #define IMAGE_SYM_TYPE_NULL UINT16_C(0x0000) 1133 #define IMAGE_SYM_TYPE_VOID UINT16_C(0x0001) 1134 #define IMAGE_SYM_TYPE_CHAR UINT16_C(0x0002) 1135 #define IMAGE_SYM_TYPE_SHORT UINT16_C(0x0003) 1136 #define IMAGE_SYM_TYPE_INT UINT16_C(0x0004) 1137 #define IMAGE_SYM_TYPE_LONG UINT16_C(0x0005) 1138 #define IMAGE_SYM_TYPE_FLOAT UINT16_C(0x0006) 1139 #define IMAGE_SYM_TYPE_DOUBLE UINT16_C(0x0007) 1140 #define IMAGE_SYM_TYPE_STRUCT UINT16_C(0x0008) 1141 #define IMAGE_SYM_TYPE_UNION UINT16_C(0x0009) 1142 #define IMAGE_SYM_TYPE_ENUM UINT16_C(0x000a) 1143 #define IMAGE_SYM_TYPE_MOE UINT16_C(0x000b) 1144 #define IMAGE_SYM_TYPE_BYTE UINT16_C(0x000c) 1145 #define IMAGE_SYM_TYPE_WORD UINT16_C(0x000d) 1146 #define IMAGE_SYM_TYPE_UINT UINT16_C(0x000e) 1147 #define IMAGE_SYM_TYPE_DWORD UINT16_C(0x000f) 1148 #define IMAGE_SYM_TYPE_PCODE UINT16_C(0x8000) 1149 /** @} */ 1150 1151 /** @name IMAGE_SYM_DTYPE_XXX - COFF symbol complex types 1152 * @{ */ 1153 #define IMAGE_SYM_DTYPE_NULL UINT16_C(0x0) 1154 #define IMAGE_SYM_DTYPE_POINTER UINT16_C(0x1) 1155 #define IMAGE_SYM_DTYPE_FUNCTION UINT16_C(0x2) 1156 #define IMAGE_SYM_DTYPE_ARRAY UINT16_C(0x3) 1157 /** @} */ 1158 1159 /** @name COFF Symbol type masks and shift counts. 1160 * @{ */ 1161 #define N_BTMASK UINT16_C(0x000f) 1162 #define N_TMASK UINT16_C(0x0030) 1163 #define N_TMASK1 UINT16_C(0x00c0) 1164 #define N_TMASK2 UINT16_C(0x00f0) 1165 #define N_BTSHFT 4 1166 #define N_TSHIFT 2 1167 /** @} */ 1168 1169 /** @name COFF Symbol type macros. 1170 * @{ */ 1171 #define BTYPE(a_Type) ( (a_Type) & N_BTMASK ) 1172 #define ISPTR(a_Type) ( ((a_Type) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT) ) 1173 #define ISFCN(a_Type) ( ((a_Type) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT) ) 1174 #define ISARY(a_Type) ( ((a_Type) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT) ) 1175 #define ISTAG(a_StorageClass) ( (a_StorageClass) == IMAGE_SYM_CLASS_STRUCT_TAG \ 1176 || (a_StorageClass) == IMAGE_SYM_CLASS_UNION_TAG \ 1177 || (a_StorageClass) == IMAGE_SYM_CLASS_ENUM_TAG ) 1178 /** @} */ 1179 1180 1181 /** 1182 * COFF relocation table entry. 1183 * 1184 * @note The size of the structure is not a multiple of the largest member 1185 * (uint32_t), so odd relocation table entry members will have 1186 * misaligned uint32_t members. 1187 */ 1188 #pragma pack(1) 1189 typedef struct _IMAGE_RELOCATION 1190 { 1191 union 1192 { 1193 uint32_t VirtualAddress; 1194 uint32_t RelocCount; 1195 } u; 1196 uint32_t SymbolTableIndex; 1197 uint16_t Type; 1198 } IMAGE_RELOCATION; 1199 #pragma pack() 1200 /** The size of a COFF relocation entry. */ 1201 #define IMAGE_SIZEOF_RELOCATION 10 1202 AssertCompileSize(IMAGE_RELOCATION, IMAGE_SIZEOF_RELOCATION); 1203 typedef IMAGE_RELOCATION *PIMAGE_RELOCATION; 1204 typedef IMAGE_RELOCATION const *PCIMAGE_RELOCATION; 1205 1206 1207 /** @name IMAGE_REL_AMD64_XXX - COFF relocations for AMD64 CPUs. 1208 * Used by IMAGE_RELOCATION::Type. 1209 * @{ */ 1210 #define IMAGE_REL_AMD64_ABSOLUTE UINT16_C(0x0000) 1211 #define IMAGE_REL_AMD64_ADDR64 UINT16_C(0x0001) 1212 #define IMAGE_REL_AMD64_ADDR32 UINT16_C(0x0002) 1213 #define IMAGE_REL_AMD64_ADDR32NB UINT16_C(0x0003) 1214 #define IMAGE_REL_AMD64_REL32 UINT16_C(0x0004) 1215 #define IMAGE_REL_AMD64_REL32_1 UINT16_C(0x0005) 1216 #define IMAGE_REL_AMD64_REL32_2 UINT16_C(0x0006) 1217 #define IMAGE_REL_AMD64_REL32_3 UINT16_C(0x0007) 1218 #define IMAGE_REL_AMD64_REL32_4 UINT16_C(0x0008) 1219 #define IMAGE_REL_AMD64_REL32_5 UINT16_C(0x0009) 1220 #define IMAGE_REL_AMD64_SECTION UINT16_C(0x000a) 1221 #define IMAGE_REL_AMD64_SECREL UINT16_C(0x000b) 1222 #define IMAGE_REL_AMD64_SECREL7 UINT16_C(0x000c) 1223 #define IMAGE_REL_AMD64_TOKEN UINT16_C(0x000d) 1224 #define IMAGE_REL_AMD64_SREL32 UINT16_C(0x000e) 1225 #define IMAGE_REL_AMD64_PAIR UINT16_C(0x000f) 1226 #define IMAGE_REL_AMD64_SSPAN32 UINT16_C(0x0010) 1227 /** @} */ 1228 1229 /** @name ARM IMAGE_REL_ARM_XXX - COFF relocations for ARM CPUs. 1230 * Used by IMAGE_RELOCATION::Type. 1231 * @{ */ 1232 #define IMAGE_REL_ARM_ABSOLUTE UINT16_C(0x0000) 1233 #define IMAGE_REL_ARM_ADDR32 UINT16_C(0x0001) 1234 #define IMAGE_REL_ARM_ADDR32NB UINT16_C(0x0002) 1235 #define IMAGE_REL_ARM_BRANCH24 UINT16_C(0x0003) 1236 #define IMAGE_REL_ARM_BRANCH11 UINT16_C(0x0004) 1237 #define IMAGE_REL_ARM_TOKEN UINT16_C(0x0005) 1238 #define IMAGE_REL_ARM_BLX24 UINT16_C(0x0008) 1239 #define IMAGE_REL_ARM_BLX11 UINT16_C(0x0009) 1240 #define IMAGE_REL_ARM_SECTION UINT16_C(0x000e) 1241 #define IMAGE_REL_ARM_SECREL UINT16_C(0x000f) 1242 #define IMAGE_REL_ARM_MOV32A UINT16_C(0x0010) 1243 #define IMAGE_REL_ARM_MOV32T UINT16_C(0x0011) 1244 #define IMAGE_REL_ARM_BRANCH20T UINT16_C(0x0012) 1245 #define IMAGE_REL_ARM_BRANCH24T UINT16_C(0x0014) 1246 #define IMAGE_REL_ARM_BLX23T UINT16_C(0x0015) 1247 /** @} */ 1248 1249 /** @name IMAGE_REL_ARM64_XXX - COFF relocations for ARMv8 CPUs (64-bit). 1250 * Used by IMAGE_RELOCATION::Type. 1251 * @{ */ 1252 #define IMAGE_REL_ARM64_ABSOLUTE UINT16_C(0x0000) 1253 #define IMAGE_REL_ARM64_ADDR32 UINT16_C(0x0001) 1254 #define IMAGE_REL_ARM64_ADDR32NB UINT16_C(0x0002) 1255 #define IMAGE_REL_ARM64_BRANCH26 UINT16_C(0x0003) 1256 #define IMAGE_REL_ARM64_PAGEBASE_REL21 UINT16_C(0x0004) 1257 #define IMAGE_REL_ARM64_REL21 UINT16_C(0x0005) 1258 #define IMAGE_REL_ARM64_PAGEOFFSET_12A UINT16_C(0x0006) 1259 #define IMAGE_REL_ARM64_PAGEOFFSET_12L UINT16_C(0x0007) 1260 #define IMAGE_REL_ARM64_SECREL UINT16_C(0x0008) 1261 #define IMAGE_REL_ARM64_SECREL_LOW12A UINT16_C(0x0009) 1262 #define IMAGE_REL_ARM64_SECREL_HIGH12A UINT16_C(0x000a) 1263 #define IMAGE_REL_ARM64_SECREL_LOW12L UINT16_C(0x000b) 1264 #define IMAGE_REL_ARM64_TOKEN UINT16_C(0x000c) 1265 #define IMAGE_REL_ARM64_SECTION UINT16_C(0x000d) 1266 #define IMAGE_REL_ARM64_ADDR64 UINT16_C(0x000e) 1267 /** @} */ 1268 1269 /** @name IMAGE_REL_SH3_XXX - COFF relocation for Hitachi SuperH CPUs. 1270 * Used by IMAGE_RELOCATION::Type. 1271 * @{ */ 1272 #define IMAGE_REL_SH3_ABSOLUTE UINT16_C(0x0000) 1273 #define IMAGE_REL_SH3_DIRECT16 UINT16_C(0x0001) 1274 #define IMAGE_REL_SH3_DIRECT32 UINT16_C(0x0002) 1275 #define IMAGE_REL_SH3_DIRECT8 UINT16_C(0x0003) 1276 #define IMAGE_REL_SH3_DIRECT8_WORD UINT16_C(0x0004) 1277 #define IMAGE_REL_SH3_DIRECT8_LONG UINT16_C(0x0005) 1278 #define IMAGE_REL_SH3_DIRECT4 UINT16_C(0x0006) 1279 #define IMAGE_REL_SH3_DIRECT4_WORD UINT16_C(0x0007) 1280 #define IMAGE_REL_SH3_DIRECT4_LONG UINT16_C(0x0008) 1281 #define IMAGE_REL_SH3_PCREL8_WORD UINT16_C(0x0009) 1282 #define IMAGE_REL_SH3_PCREL8_LONG UINT16_C(0x000a) 1283 #define IMAGE_REL_SH3_PCREL12_WORD UINT16_C(0x000b) 1284 #define IMAGE_REL_SH3_STARTOF_SECTION UINT16_C(0x000c) 1285 #define IMAGE_REL_SH3_SIZEOF_SECTION UINT16_C(0x000d) 1286 #define IMAGE_REL_SH3_SECTION UINT16_C(0x000e) 1287 #define IMAGE_REL_SH3_SECREL UINT16_C(0x000f) 1288 #define IMAGE_REL_SH3_DIRECT32_NB UINT16_C(0x0010) 1289 #define IMAGE_REL_SH3_GPREL4_LONG UINT16_C(0x0011) 1290 #define IMAGE_REL_SH3_TOKEN UINT16_C(0x0012) 1291 #define IMAGE_REL_SHM_PCRELPT UINT16_C(0x0013) 1292 #define IMAGE_REL_SHM_REFLO UINT16_C(0x0014) 1293 #define IMAGE_REL_SHM_REFHALF UINT16_C(0x0015) 1294 #define IMAGE_REL_SHM_RELLO UINT16_C(0x0016) 1295 #define IMAGE_REL_SHM_RELHALF UINT16_C(0x0017) 1296 #define IMAGE_REL_SHM_PAIR UINT16_C(0x0018) 1297 #define IMAGE_REL_SHM_NOMODE UINT16_C(0x8000) 1298 /** @} */ 1299 1300 /** @name IMAGE_REL_PPC_XXX - COFF relocations for IBM PowerPC CPUs. 1301 * Used by IMAGE_RELOCATION::Type. 1302 * @{ */ 1303 #define IMAGE_REL_PPC_ABSOLUTE UINT16_C(0x0000) 1304 #define IMAGE_REL_PPC_ADDR64 UINT16_C(0x0001) 1305 #define IMAGE_REL_PPC_ADDR32 UINT16_C(0x0002) 1306 #define IMAGE_REL_PPC_ADDR24 UINT16_C(0x0003) 1307 #define IMAGE_REL_PPC_ADDR16 UINT16_C(0x0004) 1308 #define IMAGE_REL_PPC_ADDR14 UINT16_C(0x0005) 1309 #define IMAGE_REL_PPC_REL24 UINT16_C(0x0006) 1310 #define IMAGE_REL_PPC_REL14 UINT16_C(0x0007) 1311 #define IMAGE_REL_PPC_ADDR32NB UINT16_C(0x000a) 1312 #define IMAGE_REL_PPC_SECREL UINT16_C(0x000b) 1313 #define IMAGE_REL_PPC_SECTION UINT16_C(0x000c) 1314 #define IMAGE_REL_PPC_SECREL16 UINT16_C(0x000f) 1315 #define IMAGE_REL_PPC_REFHI UINT16_C(0x0010) 1316 #define IMAGE_REL_PPC_REFLO UINT16_C(0x0011) 1317 #define IMAGE_REL_PPC_PAIR UINT16_C(0x0012) 1318 #define IMAGE_REL_PPC_SECRELLO UINT16_C(0x0013) 1319 #define IMAGE_REL_PPC_GPREL UINT16_C(0x0015) 1320 #define IMAGE_REL_PPC_TOKEN UINT16_C(0x0016) 1321 /** @} */ 1322 1323 /** @name IMAGE_REL_I386_XXX - COFF relocations for x86 CPUs. 1324 * Used by IMAGE_RELOCATION::Type. 1325 * @{ */ 1326 #define IMAGE_REL_I386_ABSOLUTE UINT16_C(0x0000) 1327 #define IMAGE_REL_I386_DIR16 UINT16_C(0x0001) 1328 #define IMAGE_REL_I386_REL16 UINT16_C(0x0002) 1329 #define IMAGE_REL_I386_DIR32 UINT16_C(0x0006) 1330 #define IMAGE_REL_I386_DIR32NB UINT16_C(0x0007) 1331 #define IMAGE_REL_I386_SEG12 UINT16_C(0x0009) 1332 #define IMAGE_REL_I386_SECTION UINT16_C(0x000A) 1333 #define IMAGE_REL_I386_SECREL UINT16_C(0x000B) 1334 #define IMAGE_REL_I386_TOKEN UINT16_C(0x000C) 1335 #define IMAGE_REL_I386_SECREL7 UINT16_C(0x000D) 1336 #define IMAGE_REL_I386_REL32 UINT16_C(0x0014) 1337 /** @} */ 1338 1339 /** @name IMAGE_REL_IA64_XXX - COFF relocations for "Itanic" CPUs. 1340 * @{ */ 1341 #define IMAGE_REL_IA64_ABSOLUTE UINT16_C(0x0000) 1342 #define IMAGE_REL_IA64_IMM14 UINT16_C(0x0001) 1343 #define IMAGE_REL_IA64_IMM22 UINT16_C(0x0002) 1344 #define IMAGE_REL_IA64_IMM64 UINT16_C(0x0003) 1345 #define IMAGE_REL_IA64_DIR32 UINT16_C(0x0004) 1346 #define IMAGE_REL_IA64_DIR64 UINT16_C(0x0005) 1347 #define IMAGE_REL_IA64_PCREL21B UINT16_C(0x0006) 1348 #define IMAGE_REL_IA64_PCREL21M UINT16_C(0x0007) 1349 #define IMAGE_REL_IA64_PCREL21F UINT16_C(0x0008) 1350 #define IMAGE_REL_IA64_GPREL22 UINT16_C(0x0009) 1351 #define IMAGE_REL_IA64_LTOFF22 UINT16_C(0x000a) 1352 #define IMAGE_REL_IA64_SECTION UINT16_C(0x000b) 1353 #define IMAGE_REL_IA64_SECREL22 UINT16_C(0x000c) 1354 #define IMAGE_REL_IA64_SECREL64I UINT16_C(0x000d) 1355 #define IMAGE_REL_IA64_SECREL32 UINT16_C(0x000e) 1356 #define IMAGE_REL_IA64_DIR32NB UINT16_C(0x0010) 1357 #define IMAGE_REL_IA64_SREL14 UINT16_C(0x0011) 1358 #define IMAGE_REL_IA64_SREL22 UINT16_C(0x0012) 1359 #define IMAGE_REL_IA64_SREL32 UINT16_C(0x0013) 1360 #define IMAGE_REL_IA64_UREL32 UINT16_C(0x0014) 1361 #define IMAGE_REL_IA64_PCREL60X UINT16_C(0x0015) 1362 #define IMAGE_REL_IA64_PCREL60B UINT16_C(0x0016) 1363 #define IMAGE_REL_IA64_PCREL60F UINT16_C(0x0017) 1364 #define IMAGE_REL_IA64_PCREL60I UINT16_C(0x0018) 1365 #define IMAGE_REL_IA64_PCREL60M UINT16_C(0x0019) 1366 #define IMAGE_REL_IA64_IMMGPREL64 UINT16_C(0x001a) 1367 #define IMAGE_REL_IA64_TOKEN UINT16_C(0x001b) 1368 #define IMAGE_REL_IA64_GPREL32 UINT16_C(0x001c) 1369 #define IMAGE_REL_IA64_ADDEND UINT16_C(0x001f) 1370 /** @} */ 1371 1372 /** @name IMAGE_REL_MIPS_XXX - COFF relocations for MIPS CPUs. 1373 * Used by IMAGE_RELOCATION::Type. 1374 * @{ */ 1375 #define IMAGE_REL_MIPS_ABSOLUTE UINT16_C(0x0000) 1376 #define IMAGE_REL_MIPS_REFHALF UINT16_C(0x0001) 1377 #define IMAGE_REL_MIPS_REFWORD UINT16_C(0x0002) 1378 #define IMAGE_REL_MIPS_JMPADDR UINT16_C(0x0003) 1379 #define IMAGE_REL_MIPS_REFHI UINT16_C(0x0004) 1380 #define IMAGE_REL_MIPS_REFLO UINT16_C(0x0005) 1381 #define IMAGE_REL_MIPS_GPREL UINT16_C(0x0006) 1382 #define IMAGE_REL_MIPS_LITERAL UINT16_C(0x0007) 1383 #define IMAGE_REL_MIPS_SECTION UINT16_C(0x000a) 1384 #define IMAGE_REL_MIPS_SECREL UINT16_C(0x000b) 1385 #define IMAGE_REL_MIPS_SECRELLO UINT16_C(0x000c) 1386 #define IMAGE_REL_MIPS_SECRELHI UINT16_C(0x000d) 1387 #define IMAGE_REL_MIPS_JMPADDR16 UINT16_C(0x0010) 1388 #define IMAGE_REL_MIPS_REFWORDNB UINT16_C(0x0022) 1389 #define IMAGE_REL_MIPS_PAIR UINT16_C(0x0025) 1390 /** @} */ 1391 1392 /** @name IMAGE_REL_M32R_XXX - COFF relocations for Mitsubishi M32R CPUs. 1393 * Used by IMAGE_RELOCATION::Type. 1394 * @{ */ 1395 #define IMAGE_REL_M32R_ABSOLUTE UINT16_C(0x0000) 1396 #define IMAGE_REL_M32R_ADDR32 UINT16_C(0x0001) 1397 #define IMAGE_REL_M32R_ADDR32NB UINT16_C(0x0002) 1398 #define IMAGE_REL_M32R_ADDR24 UINT16_C(0x0003) 1399 #define IMAGE_REL_M32R_GPREL16 UINT16_C(0x0004) 1400 #define IMAGE_REL_M32R_PCREL24 UINT16_C(0x0005) 1401 #define IMAGE_REL_M32R_PCREL16 UINT16_C(0x0006) 1402 #define IMAGE_REL_M32R_PCREL8 UINT16_C(0x0007) 1403 #define IMAGE_REL_M32R_REFHALF UINT16_C(0x0008) 1404 #define IMAGE_REL_M32R_REFHI UINT16_C(0x0009) 1405 #define IMAGE_REL_M32R_REFLO UINT16_C(0x000a) 1406 #define IMAGE_REL_M32R_PAIR UINT16_C(0x000b) 1407 #define IMAGE_REL_M32R_SECTION UINT16_C(0x000c) 1408 #define IMAGE_REL_M32R_SECREL UINT16_C(0x000d) 1409 #define IMAGE_REL_M32R_TOKEN UINT16_C(0x000e) 1410 /** @} */ 1411 1412 1413 /** @} */ 1035 1414 1036 1415 #endif
Note:
See TracChangeset
for help on using the changeset viewer.

