2
* This file is an excerpt of winnt.h from WINE, which bears the
5
* Win32 definitions for Windows NT
7
* Copyright 1996 Alexandre Julliard
9
* This library is free software; you can redistribute it and/or
10
* modify it under the terms of the GNU Lesser General Public
11
* License as published by the Free Software Foundation; either
12
* version 2.1 of the License, or (at your option) any later version.
14
* This library is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* Lesser General Public License for more details.
19
* You should have received a copy of the GNU Lesser General Public
20
* License along with this library; if not, write to the Free Software
21
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25
* File formats definitions
27
typedef struct _IMAGE_DOS_HEADER {
28
WORD e_magic; /* 00: MZ Header signature */
29
WORD e_cblp; /* 02: Bytes on last page of file */
30
WORD e_cp; /* 04: Pages in file */
31
WORD e_crlc; /* 06: Relocations */
32
WORD e_cparhdr; /* 08: Size of header in paragraphs */
33
WORD e_minalloc; /* 0a: Minimum extra paragraphs needed */
34
WORD e_maxalloc; /* 0c: Maximum extra paragraphs needed */
35
WORD e_ss; /* 0e: Initial (relative) SS value */
36
WORD e_sp; /* 10: Initial SP value */
37
WORD e_csum; /* 12: Checksum */
38
WORD e_ip; /* 14: Initial IP value */
39
WORD e_cs; /* 16: Initial (relative) CS value */
40
WORD e_lfarlc; /* 18: File address of relocation table */
41
WORD e_ovno; /* 1a: Overlay number */
42
WORD e_res[4]; /* 1c: Reserved words */
43
WORD e_oemid; /* 24: OEM identifier (for e_oeminfo) */
44
WORD e_oeminfo; /* 26: OEM information; e_oemid specific */
45
WORD e_res2[10]; /* 28: Reserved words */
46
DWORD e_lfanew; /* 3c: Offset to extended header */
47
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
49
#define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */
50
#define IMAGE_OS2_SIGNATURE 0x454E /* NE */
51
#define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */
52
#define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */
53
#define IMAGE_VXD_SIGNATURE 0x454C /* LE */
54
#define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */
57
* This is the Windows executable (NE) header.
58
* the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
62
WORD ne_magic; /* 00 NE signature 'NE' */
63
BYTE ne_ver; /* 02 Linker version number */
64
BYTE ne_rev; /* 03 Linker revision number */
65
WORD ne_enttab; /* 04 Offset to entry table relative to NE */
66
WORD ne_cbenttab; /* 06 Length of entry table in bytes */
67
LONG ne_crc; /* 08 Checksum */
68
WORD ne_flags; /* 0c Flags about segments in this file */
69
WORD ne_autodata; /* 0e Automatic data segment number */
70
WORD ne_heap; /* 10 Initial size of local heap */
71
WORD ne_stack; /* 12 Initial size of stack */
72
DWORD ne_csip; /* 14 Initial CS:IP */
73
DWORD ne_sssp; /* 18 Initial SS:SP */
74
WORD ne_cseg; /* 1c # of entries in segment table */
75
WORD ne_cmod; /* 1e # of entries in module reference tab. */
76
WORD ne_cbnrestab; /* 20 Length of nonresident-name table */
77
WORD ne_segtab; /* 22 Offset to segment table */
78
WORD ne_rsrctab; /* 24 Offset to resource table */
79
WORD ne_restab; /* 26 Offset to resident-name table */
80
WORD ne_modtab; /* 28 Offset to module reference table */
81
WORD ne_imptab; /* 2a Offset to imported name table */
82
DWORD ne_nrestab; /* 2c Offset to nonresident-name table */
83
WORD ne_cmovent; /* 30 # of movable entry points */
84
WORD ne_align; /* 32 Logical sector alignment shift count */
85
WORD ne_cres; /* 34 # of resource segments */
86
BYTE ne_exetyp; /* 36 Flags indicating target OS */
87
BYTE ne_flagsothers; /* 37 Additional information flags */
88
WORD ne_pretthunks; /* 38 Offset to return thunks */
89
WORD ne_psegrefbytes; /* 3a Offset to segment ref. bytes */
90
WORD ne_swaparea; /* 3c Reserved by Microsoft */
91
WORD ne_expver; /* 3e Expected Windows version number */
92
} IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;
94
typedef struct _IMAGE_VXD_HEADER {
109
DWORD e32_lastpagesize;
138
DWORD e32_instpreload;
139
DWORD e32_instdemand;
146
} IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;
148
/* These defines describe the meanings of the bits in the
149
Characteristics field */
151
#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */
152
#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
153
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
154
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
155
#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
156
#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
157
#define IMAGE_FILE_16BIT_MACHINE 0x0040
158
#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
159
#define IMAGE_FILE_32BIT_MACHINE 0x0100
160
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
161
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
162
#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
163
#define IMAGE_FILE_SYSTEM 0x1000
164
#define IMAGE_FILE_DLL 0x2000
165
#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
166
#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
168
/* These are the settings of the Machine field. */
169
#define IMAGE_FILE_MACHINE_UNKNOWN 0
170
#define IMAGE_FILE_MACHINE_I860 0x014d
171
#define IMAGE_FILE_MACHINE_I386 0x014c
172
#define IMAGE_FILE_MACHINE_R3000 0x0162
173
#define IMAGE_FILE_MACHINE_R4000 0x0166
174
#define IMAGE_FILE_MACHINE_R10000 0x0168
175
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
176
#define IMAGE_FILE_MACHINE_ALPHA 0x0184
177
#define IMAGE_FILE_MACHINE_SH3 0x01a2
178
#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
179
#define IMAGE_FILE_MACHINE_SH3E 0x01a4
180
#define IMAGE_FILE_MACHINE_SH4 0x01a6
181
#define IMAGE_FILE_MACHINE_SH5 0x01a8
182
#define IMAGE_FILE_MACHINE_ARM 0x01c0
183
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
184
#define IMAGE_FILE_MACHINE_AM33 0x01d3
185
#define IMAGE_FILE_MACHINE_POWERPC 0x01f0
186
#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
187
#define IMAGE_FILE_MACHINE_IA64 0x0200
188
#define IMAGE_FILE_MACHINE_MIPS16 0x0266
189
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
190
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
191
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
192
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
193
#define IMAGE_FILE_MACHINE_TRICORE 0x0520
194
#define IMAGE_FILE_MACHINE_CEF 0x0cef
195
#define IMAGE_FILE_MACHINE_EBC 0x0ebc
196
#define IMAGE_FILE_MACHINE_AMD64 0x8664
197
#define IMAGE_FILE_MACHINE_M32R 0x9041
198
#define IMAGE_FILE_MACHINE_CEE 0xc0ee
200
#define IMAGE_SIZEOF_FILE_HEADER 20
201
#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
202
#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
203
#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER32 224
204
#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER64 240
205
#define IMAGE_SIZEOF_SHORT_NAME 8
206
#define IMAGE_SIZEOF_SECTION_HEADER 40
207
#define IMAGE_SIZEOF_SYMBOL 18
208
#define IMAGE_SIZEOF_AUX_SYMBOL 18
209
#define IMAGE_SIZEOF_RELOCATION 10
210
#define IMAGE_SIZEOF_BASE_RELOCATION 8
211
#define IMAGE_SIZEOF_LINENUMBER 6
212
#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
214
/* Possible Magic values */
215
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b
216
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b
217
#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x0107
220
#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER64
221
#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
223
#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER32
224
#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
227
/* These are indexes into the DataDirectory array */
228
#define IMAGE_FILE_EXPORT_DIRECTORY 0
229
#define IMAGE_FILE_IMPORT_DIRECTORY 1
230
#define IMAGE_FILE_RESOURCE_DIRECTORY 2
231
#define IMAGE_FILE_EXCEPTION_DIRECTORY 3
232
#define IMAGE_FILE_SECURITY_DIRECTORY 4
233
#define IMAGE_FILE_BASE_RELOCATION_TABLE 5
234
#define IMAGE_FILE_DEBUG_DIRECTORY 6
235
#define IMAGE_FILE_DESCRIPTION_STRING 7
236
#define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */
237
#define IMAGE_FILE_THREAD_LOCAL_STORAGE 9
238
#define IMAGE_FILE_CALLBACK_DIRECTORY 10
240
/* Directory Entries, indices into the DataDirectory array */
242
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0
243
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1
244
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
245
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
246
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
247
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
248
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
249
#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
250
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */
251
#define IMAGE_DIRECTORY_ENTRY_TLS 9
252
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
253
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
254
#define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */
255
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
256
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
258
/* Subsystem Values */
260
#define IMAGE_SUBSYSTEM_UNKNOWN 0
261
#define IMAGE_SUBSYSTEM_NATIVE 1
262
#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */
263
#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */
264
#define IMAGE_SUBSYSTEM_OS2_CUI 5
265
#define IMAGE_SUBSYSTEM_POSIX_CUI 7
266
#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */
267
#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */
268
#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
269
#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
270
#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
271
#define IMAGE_SUBSYSTEM_EFI_ROM 13
272
#define IMAGE_SUBSYSTEM_XBOX 14
274
typedef struct _IMAGE_FILE_HEADER {
276
WORD NumberOfSections;
278
DWORD PointerToSymbolTable;
279
DWORD NumberOfSymbols;
280
WORD SizeOfOptionalHeader;
281
WORD Characteristics;
282
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
284
typedef struct _IMAGE_DATA_DIRECTORY {
285
DWORD VirtualAddress;
287
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
289
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
291
typedef struct _IMAGE_OPTIONAL_HEADER32 {
293
/* Standard fields */
296
BYTE MajorLinkerVersion;
297
BYTE MinorLinkerVersion;
299
DWORD SizeOfInitializedData;
300
DWORD SizeOfUninitializedData;
301
DWORD AddressOfEntryPoint;
305
/* NT additional fields */
307
DWORD SectionAlignment;
309
WORD MajorOperatingSystemVersion;
310
WORD MinorOperatingSystemVersion;
311
WORD MajorImageVersion;
312
WORD MinorImageVersion;
313
WORD MajorSubsystemVersion;
314
WORD MinorSubsystemVersion;
315
DWORD Win32VersionValue;
320
WORD DllCharacteristics;
321
DWORD SizeOfStackReserve;
322
DWORD SizeOfStackCommit;
323
DWORD SizeOfHeapReserve;
324
DWORD SizeOfHeapCommit;
326
DWORD NumberOfRvaAndSizes;
327
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
328
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
330
typedef struct _IMAGE_OPTIONAL_HEADER64 {
332
/* Standard fields */
335
BYTE MajorLinkerVersion;
336
BYTE MinorLinkerVersion;
338
DWORD SizeOfInitializedData;
339
DWORD SizeOfUninitializedData;
340
DWORD AddressOfEntryPoint;
343
/* NT additional fields */
345
DWORD SectionAlignment;
347
WORD MajorOperatingSystemVersion;
348
WORD MinorOperatingSystemVersion;
349
WORD MajorImageVersion;
350
WORD MinorImageVersion;
351
WORD MajorSubsystemVersion;
352
WORD MinorSubsystemVersion;
353
DWORD Win32VersionValue;
358
WORD DllCharacteristics;
359
ULONGLONG SizeOfStackReserve;
360
ULONGLONG SizeOfStackCommit;
361
ULONGLONG SizeOfHeapReserve;
362
ULONGLONG SizeOfHeapCommit;
364
DWORD NumberOfRvaAndSizes;
365
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
366
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
369
typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
370
typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
372
typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
373
typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
376
typedef struct _IMAGE_NT_HEADERS32 {
377
DWORD Signature; /* "PE"\0\0 */ /* 0x00 */
378
IMAGE_FILE_HEADER FileHeader; /* 0x04 */
379
IMAGE_OPTIONAL_HEADER32 OptionalHeader; /* 0x18 */
380
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
382
typedef struct _IMAGE_NT_HEADERS64 {
383
DWORD Signature; /* "PE"\0\0 */ /* 0x00 */
384
IMAGE_FILE_HEADER FileHeader; /* 0x04 */
385
IMAGE_OPTIONAL_HEADER64 OptionalHeader; /* 0x18 */
386
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
389
typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
390
typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
392
typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
393
typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
396
#define IMAGE_SIZEOF_SHORT_NAME 8
398
typedef struct _IMAGE_SECTION_HEADER {
399
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
401
DWORD PhysicalAddress;
404
DWORD VirtualAddress;
406
DWORD PointerToRawData;
407
DWORD PointerToRelocations;
408
DWORD PointerToLinenumbers;
409
WORD NumberOfRelocations;
410
WORD NumberOfLinenumbers;
411
DWORD Characteristics;
412
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
414
#define IMAGE_SIZEOF_SECTION_HEADER 40
416
#define IMAGE_FIRST_SECTION(ntheader) \
417
((PIMAGE_SECTION_HEADER)((LPBYTE)&((PIMAGE_NT_HEADERS)(ntheader))->OptionalHeader + \
418
((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
420
/* These defines are for the Characteristics bitfield. */
421
/* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */
422
/* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */
423
/* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */
424
/* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */
425
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */
426
/* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */
428
#define IMAGE_SCN_CNT_CODE 0x00000020
429
#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
430
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
432
#define IMAGE_SCN_LNK_OTHER 0x00000100
433
#define IMAGE_SCN_LNK_INFO 0x00000200
434
/* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */
435
#define IMAGE_SCN_LNK_REMOVE 0x00000800
436
#define IMAGE_SCN_LNK_COMDAT 0x00001000
438
/* 0x00002000 - Reserved */
439
/* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */
440
#define IMAGE_SCN_MEM_FARDATA 0x00008000
442
/* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */
443
#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
444
#define IMAGE_SCN_MEM_16BIT 0x00020000
445
#define IMAGE_SCN_MEM_LOCKED 0x00040000
446
#define IMAGE_SCN_MEM_PRELOAD 0x00080000
448
#define IMAGE_SCN_ALIGN_1BYTES 0x00100000
449
#define IMAGE_SCN_ALIGN_2BYTES 0x00200000
450
#define IMAGE_SCN_ALIGN_4BYTES 0x00300000
451
#define IMAGE_SCN_ALIGN_8BYTES 0x00400000
452
#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */
453
#define IMAGE_SCN_ALIGN_32BYTES 0x00600000
454
#define IMAGE_SCN_ALIGN_64BYTES 0x00700000
455
#define IMAGE_SCN_ALIGN_128BYTES 0x00800000
456
#define IMAGE_SCN_ALIGN_256BYTES 0x00900000
457
#define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
458
#define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
459
#define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
460
#define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
461
#define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
462
/* 0x00F00000 - Unused */
463
#define IMAGE_SCN_ALIGN_MASK 0x00F00000
465
#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
468
#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
469
#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
470
#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
471
#define IMAGE_SCN_MEM_SHARED 0x10000000
472
#define IMAGE_SCN_MEM_EXECUTE 0x20000000
473
#define IMAGE_SCN_MEM_READ 0x40000000
474
#define IMAGE_SCN_MEM_WRITE 0x80000000
476
typedef struct _IMAGE_SYMBOL {
489
BYTE NumberOfAuxSymbols;
491
typedef IMAGE_SYMBOL *PIMAGE_SYMBOL;
493
#define IMAGE_SIZEOF_SYMBOL 18
495
typedef struct _IMAGE_LINENUMBER {
497
DWORD SymbolTableIndex;
498
DWORD VirtualAddress;
502
typedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER;
504
#define IMAGE_SIZEOF_LINENUMBER 6
506
typedef union _IMAGE_AUX_SYMBOL {
518
DWORD PointerToLinenumber;
519
DWORD PointerToNextFunction;
528
BYTE Name[IMAGE_SIZEOF_SYMBOL];
532
WORD NumberOfRelocations;
533
WORD NumberOfLinenumbers;
539
typedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL;
541
#define IMAGE_SIZEOF_AUX_SYMBOL 18
543
#define IMAGE_SYM_UNDEFINED (SHORT)0
544
#define IMAGE_SYM_ABSOLUTE (SHORT)-1
545
#define IMAGE_SYM_DEBUG (SHORT)-2
547
#define IMAGE_SYM_TYPE_NULL 0x0000
548
#define IMAGE_SYM_TYPE_VOID 0x0001
549
#define IMAGE_SYM_TYPE_CHAR 0x0002
550
#define IMAGE_SYM_TYPE_SHORT 0x0003
551
#define IMAGE_SYM_TYPE_INT 0x0004
552
#define IMAGE_SYM_TYPE_LONG 0x0005
553
#define IMAGE_SYM_TYPE_FLOAT 0x0006
554
#define IMAGE_SYM_TYPE_DOUBLE 0x0007
555
#define IMAGE_SYM_TYPE_STRUCT 0x0008
556
#define IMAGE_SYM_TYPE_UNION 0x0009
557
#define IMAGE_SYM_TYPE_ENUM 0x000A
558
#define IMAGE_SYM_TYPE_MOE 0x000B
559
#define IMAGE_SYM_TYPE_BYTE 0x000C
560
#define IMAGE_SYM_TYPE_WORD 0x000D
561
#define IMAGE_SYM_TYPE_UINT 0x000E
562
#define IMAGE_SYM_TYPE_DWORD 0x000F
563
#define IMAGE_SYM_TYPE_PCODE 0x8000
565
#define IMAGE_SYM_DTYPE_NULL 0
566
#define IMAGE_SYM_DTYPE_POINTER 1
567
#define IMAGE_SYM_DTYPE_FUNCTION 2
568
#define IMAGE_SYM_DTYPE_ARRAY 3
570
#define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1
571
#define IMAGE_SYM_CLASS_NULL 0x0000
572
#define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
573
#define IMAGE_SYM_CLASS_EXTERNAL 0x0002
574
#define IMAGE_SYM_CLASS_STATIC 0x0003
575
#define IMAGE_SYM_CLASS_REGISTER 0x0004
576
#define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
577
#define IMAGE_SYM_CLASS_LABEL 0x0006
578
#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
579
#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
580
#define IMAGE_SYM_CLASS_ARGUMENT 0x0009
581
#define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
582
#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
583
#define IMAGE_SYM_CLASS_UNION_TAG 0x000C
584
#define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
585
#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
586
#define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
587
#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
588
#define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
589
#define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
591
#define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
592
#define IMAGE_SYM_CLASS_BLOCK 0x0064
593
#define IMAGE_SYM_CLASS_FUNCTION 0x0065
594
#define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
595
#define IMAGE_SYM_CLASS_FILE 0x0067
596
#define IMAGE_SYM_CLASS_SECTION 0x0068
597
#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
599
#define N_BTMASK 0x000F
600
#define N_TMASK 0x0030
601
#define N_TMASK1 0x00C0
602
#define N_TMASK2 0x00F0
606
#define BTYPE(x) ((x) & N_BTMASK)
609
#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
613
#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
617
#define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
621
#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
625
#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
628
#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
631
#define IMAGE_COMDAT_SELECT_NODUPLICATES 1
632
#define IMAGE_COMDAT_SELECT_ANY 2
633
#define IMAGE_COMDAT_SELECT_SAME_SIZE 3
634
#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
635
#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
636
#define IMAGE_COMDAT_SELECT_LARGEST 6
637
#define IMAGE_COMDAT_SELECT_NEWEST 7
639
#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
640
#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
641
#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
643
/* Export module directory */
645
typedef struct _IMAGE_EXPORT_DIRECTORY {
646
DWORD Characteristics;
652
DWORD NumberOfFunctions;
654
DWORD AddressOfFunctions;
655
DWORD AddressOfNames;
656
DWORD AddressOfNameOrdinals;
657
} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
659
/* Import name entry */
660
typedef struct _IMAGE_IMPORT_BY_NAME {
663
} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
666
typedef struct _IMAGE_THUNK_DATA32 {
668
DWORD ForwarderString;
673
} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
675
typedef struct _IMAGE_THUNK_DATA64 {
677
ULONGLONG ForwarderString;
680
ULONGLONG AddressOfData;
682
} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64;
685
typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
686
typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
688
typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
689
typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
692
/* Import module directory */
694
typedef struct packed _IMAGE_IMPORT_DESCRIPTOR {
696
DWORD Characteristics; /* 0 for terminating null
697
* import descriptor */
698
DWORD OriginalFirstThunk; /* RVA to original unbound
701
DWORD TimeDateStamp; /* 0 if not bound,
702
* -1 if bound, and real date\time stamp
703
* in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
705
* otherwise date/time stamp of DLL bound to
708
DWORD ForwarderChain; /* -1 if no forwarders */
710
/* RVA to IAT (if bound this IAT has actual addresses) */
712
} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
714
#define IMAGE_ORDINAL_FLAG32 0x80000000
715
#define IMAGE_ORDINAL_FLAG64 0x8000000000000000UL
716
#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0)
717
#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0)
718
#define IMAGE_ORDINAL(Ordinal) (Ordinal & 0xffff)
721
#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
722
#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL64
724
#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
725
#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL32
728
typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
731
WORD OffsetModuleName;
732
WORD NumberOfModuleForwarderRefs;
733
/* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */
734
} IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR;
736
typedef struct _IMAGE_BOUND_FORWARDER_REF
739
WORD OffsetModuleName;
741
} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
743
typedef struct _IMAGE_BASE_RELOCATION
745
DWORD VirtualAddress;
748
} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
750
typedef struct _IMAGE_RELOCATION
753
DWORD VirtualAddress;
756
DWORD SymbolTableIndex;
758
} IMAGE_RELOCATION, *PIMAGE_RELOCATION;
760
#define IMAGE_SIZEOF_RELOCATION 10
762
/* generic relocation types */
763
#define IMAGE_REL_BASED_ABSOLUTE 0
764
#define IMAGE_REL_BASED_HIGH 1
765
#define IMAGE_REL_BASED_LOW 2
766
#define IMAGE_REL_BASED_HIGHLOW 3
767
#define IMAGE_REL_BASED_HIGHADJ 4
768
#define IMAGE_REL_BASED_MIPS_JMPADDR 5
769
#define IMAGE_REL_BASED_SECTION 6
770
#define IMAGE_REL_BASED_REL 7
771
#define IMAGE_REL_BASED_MIPS_JMPADDR16 9
772
#define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */
773
#define IMAGE_REL_BASED_DIR64 10
774
#define IMAGE_REL_BASED_HIGH3ADJ 11
776
/* I386 relocation types */
777
#define IMAGE_REL_I386_ABSOLUTE 0
778
#define IMAGE_REL_I386_DIR16 1
779
#define IMAGE_REL_I386_REL16 2
780
#define IMAGE_REL_I386_DIR32 6
781
#define IMAGE_REL_I386_DIR32NB 7
782
#define IMAGE_REL_I386_SEG12 9
783
#define IMAGE_REL_I386_SECTION 10
784
#define IMAGE_REL_I386_SECREL 11
785
#define IMAGE_REL_I386_REL32 20
787
/* MIPS relocation types */
788
#define IMAGE_REL_MIPS_ABSOLUTE 0x0000
789
#define IMAGE_REL_MIPS_REFHALF 0x0001
790
#define IMAGE_REL_MIPS_REFWORD 0x0002
791
#define IMAGE_REL_MIPS_JMPADDR 0x0003
792
#define IMAGE_REL_MIPS_REFHI 0x0004
793
#define IMAGE_REL_MIPS_REFLO 0x0005
794
#define IMAGE_REL_MIPS_GPREL 0x0006
795
#define IMAGE_REL_MIPS_LITERAL 0x0007
796
#define IMAGE_REL_MIPS_SECTION 0x000A
797
#define IMAGE_REL_MIPS_SECREL 0x000B
798
#define IMAGE_REL_MIPS_SECRELLO 0x000C
799
#define IMAGE_REL_MIPS_SECRELHI 0x000D
800
#define IMAGE_REL_MIPS_JMPADDR16 0x0010
801
#define IMAGE_REL_MIPS_REFWORDNB 0x0022
802
#define IMAGE_REL_MIPS_PAIR 0x0025
804
/* ALPHA relocation types */
805
#define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
806
#define IMAGE_REL_ALPHA_REFLONG 0x0001
807
#define IMAGE_REL_ALPHA_REFQUAD 0x0002
808
#define IMAGE_REL_ALPHA_GPREL 0x0003
809
#define IMAGE_REL_ALPHA_LITERAL 0x0004
810
#define IMAGE_REL_ALPHA_LITUSE 0x0005
811
#define IMAGE_REL_ALPHA_GPDISP 0x0006
812
#define IMAGE_REL_ALPHA_BRADDR 0x0007
813
#define IMAGE_REL_ALPHA_HINT 0x0008
814
#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
815
#define IMAGE_REL_ALPHA_REFHI 0x000A
816
#define IMAGE_REL_ALPHA_REFLO 0x000B
817
#define IMAGE_REL_ALPHA_PAIR 0x000C
818
#define IMAGE_REL_ALPHA_MATCH 0x000D
819
#define IMAGE_REL_ALPHA_SECTION 0x000E
820
#define IMAGE_REL_ALPHA_SECREL 0x000F
821
#define IMAGE_REL_ALPHA_REFLONGNB 0x0010
822
#define IMAGE_REL_ALPHA_SECRELLO 0x0011
823
#define IMAGE_REL_ALPHA_SECRELHI 0x0012
824
#define IMAGE_REL_ALPHA_REFQ3 0x0013
825
#define IMAGE_REL_ALPHA_REFQ2 0x0014
826
#define IMAGE_REL_ALPHA_REFQ1 0x0015
827
#define IMAGE_REL_ALPHA_GPRELLO 0x0016
828
#define IMAGE_REL_ALPHA_GPRELHI 0x0017
830
/* PowerPC relocation types */
831
#define IMAGE_REL_PPC_ABSOLUTE 0x0000
832
#define IMAGE_REL_PPC_ADDR64 0x0001
833
#define IMAGE_REL_PPC_ADDR 0x0002
834
#define IMAGE_REL_PPC_ADDR24 0x0003
835
#define IMAGE_REL_PPC_ADDR16 0x0004
836
#define IMAGE_REL_PPC_ADDR14 0x0005
837
#define IMAGE_REL_PPC_REL24 0x0006
838
#define IMAGE_REL_PPC_REL14 0x0007
839
#define IMAGE_REL_PPC_TOCREL16 0x0008
840
#define IMAGE_REL_PPC_TOCREL14 0x0009
841
#define IMAGE_REL_PPC_ADDR32NB 0x000A
842
#define IMAGE_REL_PPC_SECREL 0x000B
843
#define IMAGE_REL_PPC_SECTION 0x000C
844
#define IMAGE_REL_PPC_IFGLUE 0x000D
845
#define IMAGE_REL_PPC_IMGLUE 0x000E
846
#define IMAGE_REL_PPC_SECREL16 0x000F
847
#define IMAGE_REL_PPC_REFHI 0x0010
848
#define IMAGE_REL_PPC_REFLO 0x0011
849
#define IMAGE_REL_PPC_PAIR 0x0012
850
#define IMAGE_REL_PPC_SECRELLO 0x0013
851
#define IMAGE_REL_PPC_SECRELHI 0x0014
852
#define IMAGE_REL_PPC_GPREL 0x0015
853
#define IMAGE_REL_PPC_TYPEMASK 0x00FF
855
#define IMAGE_REL_PPC_NEG 0x0100
856
#define IMAGE_REL_PPC_BRTAKEN 0x0200
857
#define IMAGE_REL_PPC_BRNTAKEN 0x0400
858
#define IMAGE_REL_PPC_TOCDEFN 0x0800
860
/* SH3 ? relocation type */
861
#define IMAGE_REL_SH3_ABSOLUTE 0x0000
862
#define IMAGE_REL_SH3_DIRECT16 0x0001
863
#define IMAGE_REL_SH3_DIRECT 0x0002
864
#define IMAGE_REL_SH3_DIRECT8 0x0003
865
#define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
866
#define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
867
#define IMAGE_REL_SH3_DIRECT4 0x0006
868
#define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
869
#define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
870
#define IMAGE_REL_SH3_PCREL8_WORD 0x0009
871
#define IMAGE_REL_SH3_PCREL8_LONG 0x000A
872
#define IMAGE_REL_SH3_PCREL12_WORD 0x000B
873
#define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
874
#define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
875
#define IMAGE_REL_SH3_SECTION 0x000E
876
#define IMAGE_REL_SH3_SECREL 0x000F
877
#define IMAGE_REL_SH3_DIRECT32_NB 0x0010
879
/* ARM (Archimedes?) relocation types */
880
#define IMAGE_REL_ARM_ABSOLUTE 0x0000
881
#define IMAGE_REL_ARM_ADDR 0x0001
882
#define IMAGE_REL_ARM_ADDR32NB 0x0002
883
#define IMAGE_REL_ARM_BRANCH24 0x0003
884
#define IMAGE_REL_ARM_BRANCH11 0x0004
885
#define IMAGE_REL_ARM_SECTION 0x000E
886
#define IMAGE_REL_ARM_SECREL 0x000F
888
/* IA64 relocation types */
889
#define IMAGE_REL_IA64_ABSOLUTE 0x0000
890
#define IMAGE_REL_IA64_IMM14 0x0001
891
#define IMAGE_REL_IA64_IMM22 0x0002
892
#define IMAGE_REL_IA64_IMM64 0x0003
893
#define IMAGE_REL_IA64_DIR 0x0004
894
#define IMAGE_REL_IA64_DIR64 0x0005
895
#define IMAGE_REL_IA64_PCREL21B 0x0006
896
#define IMAGE_REL_IA64_PCREL21M 0x0007
897
#define IMAGE_REL_IA64_PCREL21F 0x0008
898
#define IMAGE_REL_IA64_GPREL22 0x0009
899
#define IMAGE_REL_IA64_LTOFF22 0x000A
900
#define IMAGE_REL_IA64_SECTION 0x000B
901
#define IMAGE_REL_IA64_SECREL22 0x000C
902
#define IMAGE_REL_IA64_SECREL64I 0x000D
903
#define IMAGE_REL_IA64_SECREL 0x000E
904
#define IMAGE_REL_IA64_LTOFF64 0x000F
905
#define IMAGE_REL_IA64_DIR32NB 0x0010
906
#define IMAGE_REL_IA64_RESERVED_11 0x0011
907
#define IMAGE_REL_IA64_RESERVED_12 0x0012
908
#define IMAGE_REL_IA64_RESERVED_13 0x0013
909
#define IMAGE_REL_IA64_RESERVED_14 0x0014
910
#define IMAGE_REL_IA64_RESERVED_15 0x0015
911
#define IMAGE_REL_IA64_RESERVED_16 0x0016
912
#define IMAGE_REL_IA64_ADDEND 0x001F
916
#define IMAGE_ARCHIVE_START_SIZE 8
917
#define IMAGE_ARCHIVE_START "!<arch>\n"
918
#define IMAGE_ARCHIVE_END "`\n"
919
#define IMAGE_ARCHIVE_PAD "\n"
920
#define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
921
#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
923
typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
932
} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;
934
#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
937
* Resource directory stuff
939
typedef struct _IMAGE_RESOURCE_DIRECTORY {
940
DWORD Characteristics;
944
WORD NumberOfNamedEntries;
945
WORD NumberOfIdEntries;
946
/* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
947
} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
949
#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
950
#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
952
typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
955
#ifdef BITFIELDS_BIGENDIAN
956
unsigned NameIsString:1;
957
unsigned NameOffset:31;
959
unsigned NameOffset:31;
960
unsigned NameIsString:1;
965
#ifdef WORDS_BIGENDIAN
977
#ifdef BITFIELDS_BIGENDIAN
978
unsigned DataIsDirectory:1;
979
unsigned OffsetToDirectory:31;
981
unsigned OffsetToDirectory:31;
982
unsigned DataIsDirectory:1;
986
} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
989
typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
991
CHAR NameString[ 1 ];
992
} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;