VirtualBox

Changeset 58654 in vbox


Ignore:
Timestamp:
Nov 11, 2015 12:21:36 AM (9 years ago)
Author:
vboxsync
Message:

include/iprt/formats/pecoff.h: Copied from Runtime/include/internal/ldrPE.h and documented the thing, adding some missing COFF stuff.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/formats/pecoff.h

    r58653 r58654  
    11/* $Id$ */
    22/** @file
    3  * IPRT - Windows NT PE Structures and Constants.
     3 * IPRT - Windows NT PE & COFF Structures and Constants.
    44 */
    55
     
    2525 */
    2626
    27 #ifndef ___internal_ldrPE_h
    28 #define ___internal_ldrPE_h
     27#ifndef ___iprt_formats_pecoff_h
     28#define ___iprt_formats_pecoff_h
    2929
    3030#include <iprt/types.h>
    3131#include <iprt/assert.h>
    3232
    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 */
    30446typedef struct _IMAGE_FILE_HEADER
    30547{
    30648    uint16_t  Machine;                      /**< 0x00 */
    30749    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 */
    31254    uint16_t  Characteristics;              /**< 0x12 */
    31355} IMAGE_FILE_HEADER;                        /* size: 0x14 */
     
    31759
    31860
     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 */
    31996typedef struct _IMAGE_DATA_DIRECTORY
    32097{
     
    32299    uint32_t  Size;
    323100} IMAGE_DATA_DIRECTORY;
     101AssertCompileSize(IMAGE_DATA_DIRECTORY, 0x8);
    324102typedef IMAGE_DATA_DIRECTORY *PIMAGE_DATA_DIRECTORY;
    325103typedef IMAGE_DATA_DIRECTORY const *PCIMAGE_DATA_DIRECTORY;
    326104
    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 */
    328115typedef struct _IMAGE_OPTIONAL_HEADER32
    329116{
     
    364151typedef IMAGE_OPTIONAL_HEADER32 const *PCIMAGE_OPTIONAL_HEADER32;
    365152
     153/**
     154 * PE optional header, 64-bit version.
     155 */
    366156typedef struct _IMAGE_OPTIONAL_HEADER64
    367157{
     
    397187    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; /**< 0x70; 0x10*8 = 0x80 */
    398188} IMAGE_OPTIONAL_HEADER64;                  /* size: 0xf0 */
     189AssertCompileSize(IMAGE_OPTIONAL_HEADER64, 0xf0);
    399190typedef IMAGE_OPTIONAL_HEADER64 *PIMAGE_OPTIONAL_HEADER64;
    400191typedef IMAGE_OPTIONAL_HEADER64 const *PCIMAGE_OPTIONAL_HEADER64;
    401192
    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 */
     258typedef struct _IMAGE_NT_HEADERS32
    404259{
    405260    uint32_t  Signature;                    /**< 0x00 */
     
    413268typedef IMAGE_NT_HEADERS32 const *PCIMAGE_NT_HEADERS32;
    414269
     270/**
     271 * PE (NT) headers, 64-bit version.
     272 */
    415273typedef struct _IMAGE_NT_HEADERS64
    416274{
     
    425283typedef IMAGE_NT_HEADERS64 const *PCIMAGE_NT_HEADERS64;
    426284
    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 */
    428296typedef struct _IMAGE_SECTION_HEADER
    429297{
     
    443311    uint32_t  Characteristics;
    444312} IMAGE_SECTION_HEADER;
     313AssertCompileSize(IMAGE_SECTION_HEADER, 40);
    445314typedef IMAGE_SECTION_HEADER *PIMAGE_SECTION_HEADER;
    446315typedef IMAGE_SECTION_HEADER const *PCIMAGE_SECTION_HEADER;
    447316
    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 */
    449383typedef struct _IMAGE_BASE_RELOCATION
    450384{
     385    /** The RVA of the page/block the following ase relocations applies to. */
    451386    uint32_t  VirtualAddress;
     387    /** The size of this relocation block, including this header. */
    452388    uint32_t  SizeOfBlock;
    453389} IMAGE_BASE_RELOCATION;
     390AssertCompileSize(IMAGE_BASE_RELOCATION, 8);
    454391typedef IMAGE_BASE_RELOCATION *PIMAGE_BASE_RELOCATION;
    455392typedef IMAGE_BASE_RELOCATION const *PCIMAGE_BASE_RELOCATION;
    456393
    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 */
    458412typedef struct _IMAGE_EXPORT_DIRECTORY
    459413{
     
    470424    uint32_t  AddressOfNameOrdinals;
    471425} IMAGE_EXPORT_DIRECTORY;
     426AssertCompileSize(IMAGE_EXPORT_DIRECTORY, 40);
    472427typedef IMAGE_EXPORT_DIRECTORY *PIMAGE_EXPORT_DIRECTORY;
    473428typedef IMAGE_EXPORT_DIRECTORY const *PCIMAGE_EXPORT_DIRECTORY;
    474429
    475430
     431/**
     432 * PE import directory entry.
     433 */
    476434typedef struct _IMAGE_IMPORT_DESCRIPTOR
    477435{
     
    486444    uint32_t  FirstThunk;
    487445} IMAGE_IMPORT_DESCRIPTOR;
     446AssertCompileSize(IMAGE_IMPORT_DESCRIPTOR, 20);
    488447typedef IMAGE_IMPORT_DESCRIPTOR *PIMAGE_IMPORT_DESCRIPTOR;
    489448typedef IMAGE_IMPORT_DESCRIPTOR const *PCIMAGE_IMPORT_DESCRIPTOR;
    490449
    491 
     450/**
     451 * Something we currently don't make use of...
     452 */
    492453typedef struct _IMAGE_IMPORT_BY_NAME
    493454{
     
    495456    uint8_t   Name[1];
    496457} IMAGE_IMPORT_BY_NAME;
     458AssertCompileSize(IMAGE_IMPORT_BY_NAME, 4);
    497459typedef IMAGE_IMPORT_BY_NAME *PIMAGE_IMPORT_BY_NAME;
    498460typedef IMAGE_IMPORT_BY_NAME const *PCIMAGE_IMPORT_BY_NAME;
    499461
    500462
    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. */
    502466typedef struct _IMAGE_THUNK_DATA64
    503467{
     
    525489typedef IMAGE_THUNK_DATA32 *PIMAGE_THUNK_DATA32;
    526490typedef 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 * @{ */
    541506
    542507/** @since Windows 10 (preview 9879) */
     
    775740typedef PCIMAGE_LOAD_CONFIG_DIRECTORY64_V4 PCIMAGE_LOAD_CONFIG_DIRECTORY64;
    776741
    777 
     742/** @} */
     743
     744
     745/**
     746 * PE certificate directory.
     747 *
     748 * Found in IMAGE_DIRECTORY_ENTRY_SECURITY.
     749 */
     750typedef struct WIN_CERTIFICATE
     751{
     752    uint32_t    dwLength;
     753    uint16_t    wRevision;
     754    uint16_t    wCertificateType;
     755    uint8_t     bCertificate[8];
     756} WIN_CERTIFICATE;
     757AssertCompileSize(WIN_CERTIFICATE, 16);
     758typedef WIN_CERTIFICATE *PWIN_CERTIFICATE;
     759typedef 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 */
    778789typedef struct _IMAGE_DEBUG_DIRECTORY
    779790{
     
    791802typedef IMAGE_DEBUG_DIRECTORY const *PCIMAGE_DEBUG_DIRECTORY;
    792803
     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 */
    793830typedef struct _IMAGE_DEBUG_MISC
    794831{
     
    804841
    805842
    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 */
    819847typedef struct _IMAGE_SEPARATE_DEBUG_HEADER
    820848{
     
    837865typedef IMAGE_SEPARATE_DEBUG_HEADER const *PCIMAGE_SEPARATE_DEBUG_HEADER;
    838866
    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 */
    840874typedef struct _IMAGE_COFF_SYMBOLS_HEADER
    841875{
     
    854888
    855889
     890/**
     891 * Line number format of IMAGE_DEBUG_TYPE_COFF debug info.
     892 *
     893 * @remarks This has misaligned members.
     894 */
    856895#pragma pack(2)
    857896typedef struct _IMAGE_LINENUMBER
     
    870909
    871910
     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 */
    872919#pragma pack(2)
    873920typedef struct _IMAGE_SYMBOL
     
    895942typedef IMAGE_SYMBOL const *PCIMAGE_SYMBOL;
    896943
    897 
     944/**
     945 * COFF auxiliary symbol token defintion (whatever that is).
     946 */
    898947#pragma pack(2)
    899948typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF
     
    909958typedef IMAGE_AUX_SYMBOL_TOKEN_DEF const *PCIMAGE_AUX_SYMBOL_TOKEN_DEF;
    910959
    911 
     960/**
     961 * COFF auxiliary symbol.
     962 */
    912963#pragma pack(1)
    913964typedef union _IMAGE_AUX_SYMBOL
     
    9691020
    9701021
    971 
     1022/**
     1023 * Extended COFF symbol.
     1024 */
    9721025typedef struct _IMAGE_SYMBOL_EX
    9731026{
     
    9931046typedef IMAGE_SYMBOL_EX const *PCIMAGE_SYMBOL_EX;
    9941047
    995 
     1048/**
     1049 * Extended COFF auxiliary symbol.
     1050 */
    9961051typedef union _IMAGE_AUX_SYMBOL_EX
    9971052{
     
    10331088typedef IMAGE_AUX_SYMBOL_EX const *PCIMAGE_AUX_SYMBOL_EX;
    10341089
     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)
     1189typedef 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
     1202AssertCompileSize(IMAGE_RELOCATION, IMAGE_SIZEOF_RELOCATION);
     1203typedef IMAGE_RELOCATION *PIMAGE_RELOCATION;
     1204typedef 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/** @} */
    10351414
    10361415#endif
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette