~ubuntu-branches/ubuntu/precise/linux-ti-omap/precise

« back to all changes in this revision

Viewing changes to ubuntu/ndiswrapper/pe_linker.h

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Bader, Amit Kucheria
  • Date: 2010-03-23 18:05:12 UTC
  • Revision ID: james.westby@ubuntu.com-20100323180512-iavj906ocnphdubp
Tags: 2.6.33-500.3
[ Amit Kucheria ]

* [Config] Fix the debug package name to end in -dbgsym
* SAUCE: Add the ubuntu/ drivers to omap
* SAUCE: Re-export the symbols for aufs
* [Config] Enable AUFS and COMPCACHE

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * This file is an excerpt of winnt.h from WINE, which bears the
 
3
 * following copyright:
 
4
 *
 
5
 * Win32 definitions for Windows NT
 
6
 *
 
7
 * Copyright 1996 Alexandre Julliard
 
8
 *
 
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.
 
13
 *
 
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.
 
18
 *
 
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
 
22
 */
 
23
 
 
24
/*
 
25
 * File formats definitions
 
26
 */
 
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;
 
48
 
 
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 */
 
55
 
 
56
/*
 
57
 * This is the Windows executable (NE) header.
 
58
 * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
 
59
 */
 
60
typedef struct
 
61
{
 
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;
 
93
 
 
94
typedef struct _IMAGE_VXD_HEADER {
 
95
  WORD  e32_magic;
 
96
  BYTE  e32_border;
 
97
  BYTE  e32_worder;
 
98
  DWORD e32_level;
 
99
  WORD  e32_cpu;
 
100
  WORD  e32_os;
 
101
  DWORD e32_ver;
 
102
  DWORD e32_mflags;
 
103
  DWORD e32_mpages;
 
104
  DWORD e32_startobj;
 
105
  DWORD e32_eip;
 
106
  DWORD e32_stackobj;
 
107
  DWORD e32_esp;
 
108
  DWORD e32_pagesize;
 
109
  DWORD e32_lastpagesize;
 
110
  DWORD e32_fixupsize;
 
111
  DWORD e32_fixupsum;
 
112
  DWORD e32_ldrsize;
 
113
  DWORD e32_ldrsum;
 
114
  DWORD e32_objtab;
 
115
  DWORD e32_objcnt;
 
116
  DWORD e32_objmap;
 
117
  DWORD e32_itermap;
 
118
  DWORD e32_rsrctab;
 
119
  DWORD e32_rsrccnt;
 
120
  DWORD e32_restab;
 
121
  DWORD e32_enttab;
 
122
  DWORD e32_dirtab;
 
123
  DWORD e32_dircnt;
 
124
  DWORD e32_fpagetab;
 
125
  DWORD e32_frectab;
 
126
  DWORD e32_impmod;
 
127
  DWORD e32_impmodcnt;
 
128
  DWORD e32_impproc;
 
129
  DWORD e32_pagesum;
 
130
  DWORD e32_datapage;
 
131
  DWORD e32_preload;
 
132
  DWORD e32_nrestab;
 
133
  DWORD e32_cbnrestab;
 
134
  DWORD e32_nressum;
 
135
  DWORD e32_autodata;
 
136
  DWORD e32_debuginfo;
 
137
  DWORD e32_debuglen;
 
138
  DWORD e32_instpreload;
 
139
  DWORD e32_instdemand;
 
140
  DWORD e32_heapsize;
 
141
  BYTE  e32_res3[12];
 
142
  DWORD e32_winresoff;
 
143
  DWORD e32_winreslen;
 
144
  WORD  e32_devid;
 
145
  WORD  e32_ddkver;
 
146
} IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;
 
147
 
 
148
/* These defines describe the meanings of the bits in the
 
149
   Characteristics field */
 
150
 
 
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
 
167
 
 
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
 
199
 
 
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
 
213
 
 
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
 
218
 
 
219
#ifdef CONFIG_X86_64
 
220
#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER64
 
221
#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
 
222
#else
 
223
#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER32
 
224
#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
 
225
#endif
 
226
 
 
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
 
239
 
 
240
/* Directory Entries, indices into the DataDirectory array */
 
241
 
 
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
 
257
 
 
258
/* Subsystem Values */
 
259
 
 
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
 
273
 
 
274
typedef struct _IMAGE_FILE_HEADER {
 
275
  WORD  Machine;
 
276
  WORD  NumberOfSections;
 
277
  DWORD TimeDateStamp;
 
278
  DWORD PointerToSymbolTable;
 
279
  DWORD NumberOfSymbols;
 
280
  WORD  SizeOfOptionalHeader;
 
281
  WORD  Characteristics;
 
282
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
 
283
 
 
284
typedef struct _IMAGE_DATA_DIRECTORY {
 
285
  DWORD VirtualAddress;
 
286
  DWORD Size;
 
287
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
 
288
 
 
289
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
 
290
 
 
291
typedef struct _IMAGE_OPTIONAL_HEADER32 {
 
292
 
 
293
  /* Standard fields */
 
294
 
 
295
  WORD  Magic;
 
296
  BYTE  MajorLinkerVersion;
 
297
  BYTE  MinorLinkerVersion;
 
298
  DWORD SizeOfCode;
 
299
  DWORD SizeOfInitializedData;
 
300
  DWORD SizeOfUninitializedData;
 
301
  DWORD AddressOfEntryPoint;
 
302
  DWORD BaseOfCode;
 
303
  DWORD BaseOfData;
 
304
 
 
305
  /* NT additional fields */
 
306
  DWORD ImageBase;
 
307
  DWORD SectionAlignment;
 
308
  DWORD FileAlignment;
 
309
  WORD  MajorOperatingSystemVersion;
 
310
  WORD  MinorOperatingSystemVersion;
 
311
  WORD  MajorImageVersion;
 
312
  WORD  MinorImageVersion;
 
313
  WORD  MajorSubsystemVersion;
 
314
  WORD  MinorSubsystemVersion;
 
315
  DWORD Win32VersionValue;
 
316
  DWORD SizeOfImage;
 
317
  DWORD SizeOfHeaders;
 
318
  DWORD CheckSum;
 
319
  WORD  Subsystem;
 
320
  WORD  DllCharacteristics;
 
321
  DWORD SizeOfStackReserve;
 
322
  DWORD SizeOfStackCommit;
 
323
  DWORD SizeOfHeapReserve;
 
324
  DWORD SizeOfHeapCommit;
 
325
  DWORD LoaderFlags;
 
326
  DWORD NumberOfRvaAndSizes;
 
327
  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
 
328
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
 
329
 
 
330
typedef struct _IMAGE_OPTIONAL_HEADER64 {
 
331
 
 
332
  /* Standard fields */
 
333
 
 
334
  WORD  Magic;
 
335
  BYTE  MajorLinkerVersion;
 
336
  BYTE  MinorLinkerVersion;
 
337
  DWORD SizeOfCode;
 
338
  DWORD SizeOfInitializedData;
 
339
  DWORD SizeOfUninitializedData;
 
340
  DWORD AddressOfEntryPoint;
 
341
  DWORD BaseOfCode;
 
342
 
 
343
  /* NT additional fields */
 
344
  ULONGLONG ImageBase;
 
345
  DWORD SectionAlignment;
 
346
  DWORD FileAlignment;
 
347
  WORD  MajorOperatingSystemVersion;
 
348
  WORD  MinorOperatingSystemVersion;
 
349
  WORD  MajorImageVersion;
 
350
  WORD  MinorImageVersion;
 
351
  WORD  MajorSubsystemVersion;
 
352
  WORD  MinorSubsystemVersion;
 
353
  DWORD Win32VersionValue;
 
354
  DWORD SizeOfImage;
 
355
  DWORD SizeOfHeaders;
 
356
  DWORD CheckSum;
 
357
  WORD  Subsystem;
 
358
  WORD  DllCharacteristics;
 
359
  ULONGLONG SizeOfStackReserve;
 
360
  ULONGLONG SizeOfStackCommit;
 
361
  ULONGLONG SizeOfHeapReserve;
 
362
  ULONGLONG SizeOfHeapCommit;
 
363
  DWORD LoaderFlags;
 
364
  DWORD NumberOfRvaAndSizes;
 
365
  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
 
366
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
 
367
 
 
368
#ifdef CONFIG_X86_64
 
369
typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
 
370
typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
 
371
#else
 
372
typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
 
373
typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
 
374
#endif
 
375
 
 
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;
 
381
 
 
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;
 
387
 
 
388
#ifdef CONFIG_X86_64
 
389
typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
 
390
typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
 
391
#else
 
392
typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
 
393
typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
 
394
#endif
 
395
 
 
396
#define IMAGE_SIZEOF_SHORT_NAME 8
 
397
 
 
398
typedef struct _IMAGE_SECTION_HEADER {
 
399
  BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];
 
400
  union {
 
401
    DWORD PhysicalAddress;
 
402
    DWORD VirtualSize;
 
403
  } Misc;
 
404
  DWORD VirtualAddress;
 
405
  DWORD SizeOfRawData;
 
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;
 
413
 
 
414
#define IMAGE_SIZEOF_SECTION_HEADER 40
 
415
 
 
416
#define IMAGE_FIRST_SECTION(ntheader) \
 
417
((PIMAGE_SECTION_HEADER)((LPBYTE)&((PIMAGE_NT_HEADERS)(ntheader))->OptionalHeader + \
 
418
((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
 
419
 
 
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 */
 
427
 
 
428
#define IMAGE_SCN_CNT_CODE                      0x00000020
 
429
#define IMAGE_SCN_CNT_INITIALIZED_DATA          0x00000040
 
430
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA        0x00000080
 
431
 
 
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
 
437
 
 
438
/*                                              0x00002000 - Reserved */
 
439
/* #define IMAGE_SCN_MEM_PROTECTED              0x00004000 - Obsolete */
 
440
#define IMAGE_SCN_MEM_FARDATA                   0x00008000
 
441
 
 
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
 
447
 
 
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
 
464
 
 
465
#define IMAGE_SCN_LNK_NRELOC_OVFL               0x01000000
 
466
 
 
467
 
 
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
 
475
 
 
476
typedef struct _IMAGE_SYMBOL {
 
477
    union {
 
478
        BYTE    ShortName[8];
 
479
        struct {
 
480
            DWORD   Short;
 
481
            DWORD   Long;
 
482
        } Name;
 
483
        DWORD   LongName[2];
 
484
    } N;
 
485
    DWORD   Value;
 
486
    SHORT   SectionNumber;
 
487
    WORD    Type;
 
488
    BYTE    StorageClass;
 
489
    BYTE    NumberOfAuxSymbols;
 
490
} IMAGE_SYMBOL;
 
491
typedef IMAGE_SYMBOL *PIMAGE_SYMBOL;
 
492
 
 
493
#define IMAGE_SIZEOF_SYMBOL 18
 
494
 
 
495
typedef struct _IMAGE_LINENUMBER {
 
496
    union {
 
497
        DWORD   SymbolTableIndex;
 
498
        DWORD   VirtualAddress;
 
499
    } Type;
 
500
    WORD    Linenumber;
 
501
} IMAGE_LINENUMBER;
 
502
typedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER;
 
503
 
 
504
#define IMAGE_SIZEOF_LINENUMBER  6
 
505
 
 
506
typedef union _IMAGE_AUX_SYMBOL {
 
507
    struct {
 
508
        DWORD    TagIndex;
 
509
        union {
 
510
            struct {
 
511
                WORD    Linenumber;
 
512
                WORD    Size;
 
513
            } LnSz;
 
514
           DWORD    TotalSize;
 
515
        } Misc;
 
516
        union {
 
517
            struct {
 
518
                DWORD    PointerToLinenumber;
 
519
                DWORD    PointerToNextFunction;
 
520
            } Function;
 
521
            struct {
 
522
                WORD     Dimension[4];
 
523
            } Array;
 
524
        } FcnAry;
 
525
        WORD    TvIndex;
 
526
    } Sym;
 
527
    struct {
 
528
        BYTE    Name[IMAGE_SIZEOF_SYMBOL];
 
529
    } File;
 
530
    struct {
 
531
        DWORD   Length;
 
532
        WORD    NumberOfRelocations;
 
533
        WORD    NumberOfLinenumbers;
 
534
        DWORD   CheckSum;
 
535
        SHORT   Number;
 
536
        BYTE    Selection;
 
537
    } Section;
 
538
} IMAGE_AUX_SYMBOL;
 
539
typedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL;
 
540
 
 
541
#define IMAGE_SIZEOF_AUX_SYMBOL 18
 
542
 
 
543
#define IMAGE_SYM_UNDEFINED           (SHORT)0
 
544
#define IMAGE_SYM_ABSOLUTE            (SHORT)-1
 
545
#define IMAGE_SYM_DEBUG               (SHORT)-2
 
546
 
 
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
 
564
 
 
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
 
569
 
 
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
 
590
 
 
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
 
598
 
 
599
#define N_BTMASK                            0x000F
 
600
#define N_TMASK                             0x0030
 
601
#define N_TMASK1                            0x00C0
 
602
#define N_TMASK2                            0x00F0
 
603
#define N_BTSHFT                            4
 
604
#define N_TSHIFT                            2
 
605
 
 
606
#define BTYPE(x) ((x) & N_BTMASK)
 
607
 
 
608
#ifndef ISPTR
 
609
#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
 
610
#endif
 
611
 
 
612
#ifndef ISFCN
 
613
#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
 
614
#endif
 
615
 
 
616
#ifndef ISARY
 
617
#define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
 
618
#endif
 
619
 
 
620
#ifndef ISTAG
 
621
#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
 
622
#endif
 
623
 
 
624
#ifndef INCREF
 
625
#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
 
626
#endif
 
627
#ifndef DECREF
 
628
#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
 
629
#endif
 
630
 
 
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
 
638
 
 
639
#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY  1
 
640
#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY    2
 
641
#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS      3
 
642
 
 
643
/* Export module directory */
 
644
 
 
645
typedef struct _IMAGE_EXPORT_DIRECTORY {
 
646
        DWORD   Characteristics;
 
647
        DWORD   TimeDateStamp;
 
648
        WORD    MajorVersion;
 
649
        WORD    MinorVersion;
 
650
        DWORD   Name;
 
651
        DWORD   Base;
 
652
        DWORD   NumberOfFunctions;
 
653
        DWORD   NumberOfNames;
 
654
        DWORD   AddressOfFunctions;
 
655
        DWORD   AddressOfNames;
 
656
        DWORD   AddressOfNameOrdinals;
 
657
} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
 
658
 
 
659
/* Import name entry */
 
660
typedef struct _IMAGE_IMPORT_BY_NAME {
 
661
        WORD    Hint;
 
662
        BYTE    Name[1];
 
663
} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
 
664
 
 
665
/* Import thunk */
 
666
typedef struct _IMAGE_THUNK_DATA32 {
 
667
        union {
 
668
                DWORD    ForwarderString;
 
669
                DWORD    Function;
 
670
                DWORD    Ordinal;
 
671
                DWORD   AddressOfData;
 
672
        } u1;
 
673
} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
 
674
 
 
675
typedef struct _IMAGE_THUNK_DATA64 {
 
676
        union {
 
677
                ULONGLONG    ForwarderString;
 
678
                ULONGLONG    Function;
 
679
                ULONGLONG    Ordinal;
 
680
                ULONGLONG    AddressOfData;
 
681
        } u1;
 
682
} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64;
 
683
 
 
684
#ifdef CONFIG_X86_64
 
685
typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
 
686
typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
 
687
#else
 
688
typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
 
689
typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
 
690
#endif
 
691
 
 
692
/* Import module directory */
 
693
 
 
694
typedef struct packed _IMAGE_IMPORT_DESCRIPTOR {
 
695
        union {
 
696
                DWORD   Characteristics; /* 0 for terminating null
 
697
                                          * import descriptor */
 
698
                DWORD   OriginalFirstThunk; /* RVA to original unbound
 
699
                                             * IAT */
 
700
        } u;
 
701
        DWORD   TimeDateStamp;  /* 0 if not bound,
 
702
                                 * -1 if bound, and real date\time stamp
 
703
                                 *    in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
 
704
                                 * (new BIND)
 
705
                                 * otherwise date/time stamp of DLL bound to
 
706
                                 * (Old BIND)
 
707
                                 */
 
708
        DWORD   ForwarderChain; /* -1 if no forwarders */
 
709
        DWORD   Name;
 
710
        /* RVA to IAT (if bound this IAT has actual addresses) */
 
711
        DWORD   FirstThunk;
 
712
} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
 
713
 
 
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)
 
719
 
 
720
#ifdef CONFIG_X86_64
 
721
#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
 
722
#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL64
 
723
#else
 
724
#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
 
725
#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL32
 
726
#endif
 
727
 
 
728
typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
 
729
{
 
730
    DWORD   TimeDateStamp;
 
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;
 
735
 
 
736
typedef struct _IMAGE_BOUND_FORWARDER_REF
 
737
{
 
738
    DWORD   TimeDateStamp;
 
739
    WORD    OffsetModuleName;
 
740
    WORD    Reserved;
 
741
} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
 
742
 
 
743
typedef struct _IMAGE_BASE_RELOCATION
 
744
{
 
745
        DWORD   VirtualAddress;
 
746
        DWORD   SizeOfBlock;
 
747
        WORD    TypeOffset[0];
 
748
} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
 
749
 
 
750
typedef struct _IMAGE_RELOCATION
 
751
{
 
752
    union {
 
753
        DWORD   VirtualAddress;
 
754
        DWORD   RelocCount;
 
755
    } DUMMYUNIONNAME;
 
756
    DWORD   SymbolTableIndex;
 
757
    WORD    Type;
 
758
} IMAGE_RELOCATION, *PIMAGE_RELOCATION;
 
759
 
 
760
#define IMAGE_SIZEOF_RELOCATION 10
 
761
 
 
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
 
775
 
 
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
 
786
 
 
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
 
803
 
 
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
 
829
 
 
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
 
854
/* modifier bits */
 
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
 
859
 
 
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
 
878
 
 
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
 
887
 
 
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
 
913
 
 
914
/* archive format */
 
915
 
 
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       "//              "
 
922
 
 
923
typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
 
924
{
 
925
    BYTE     Name[16];
 
926
    BYTE     Date[12];
 
927
    BYTE     UserID[6];
 
928
    BYTE     GroupID[6];
 
929
    BYTE     Mode[8];
 
930
    BYTE     Size[10];
 
931
    BYTE     EndHeader[2];
 
932
} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;
 
933
 
 
934
#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
 
935
 
 
936
/*
 
937
 * Resource directory stuff
 
938
 */
 
939
typedef struct _IMAGE_RESOURCE_DIRECTORY {
 
940
        DWORD   Characteristics;
 
941
        DWORD   TimeDateStamp;
 
942
        WORD    MajorVersion;
 
943
        WORD    MinorVersion;
 
944
        WORD    NumberOfNamedEntries;
 
945
        WORD    NumberOfIdEntries;
 
946
        /*  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
 
947
} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
 
948
 
 
949
#define IMAGE_RESOURCE_NAME_IS_STRING           0x80000000
 
950
#define IMAGE_RESOURCE_DATA_IS_DIRECTORY        0x80000000
 
951
 
 
952
typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
 
953
        union {
 
954
                struct {
 
955
#ifdef BITFIELDS_BIGENDIAN
 
956
                        unsigned NameIsString:1;
 
957
                        unsigned NameOffset:31;
 
958
#else
 
959
                        unsigned NameOffset:31;
 
960
                        unsigned NameIsString:1;
 
961
#endif
 
962
                } DUMMYSTRUCTNAME1;
 
963
                DWORD   Name;
 
964
                struct {
 
965
#ifdef WORDS_BIGENDIAN
 
966
                        WORD    __pad;
 
967
                        WORD    Id;
 
968
#else
 
969
                        WORD    Id;
 
970
                        WORD    __pad;
 
971
#endif
 
972
                } DUMMYSTRUCTNAME2;
 
973
        } DUMMYUNIONNAME1;
 
974
        union {
 
975
                DWORD   OffsetToData;
 
976
                struct {
 
977
#ifdef BITFIELDS_BIGENDIAN
 
978
                        unsigned DataIsDirectory:1;
 
979
                        unsigned OffsetToDirectory:31;
 
980
#else
 
981
                        unsigned OffsetToDirectory:31;
 
982
                        unsigned DataIsDirectory:1;
 
983
#endif
 
984
                } DUMMYSTRUCTNAME3;
 
985
        } DUMMYUNIONNAME2;
 
986
} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
 
987
 
 
988
 
 
989
typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
 
990
        WORD    Length;
 
991
        CHAR    NameString[ 1 ];
 
992
} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
 
993