* Bring back rbuild build to be used until bug 6372 is fixed.
[reactos.git] / tools / pecoff.h
1 #pragma once
2
3 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b
4 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b
5
6 #define IMAGE_DOS_MAGIC 0x5a4d
7 #define IMAGE_PE_MAGIC 0x00004550
8 #define IMAGE_SIZEOF_SHORT_NAME 8
9
10 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
11 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
12 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
13
14 #define IMAGE_FILE_MACHINE_I386 0x14c
15 #define IMAGE_FILE_MACHINE_AMD64 0x8664
16 #define IMAGE_FILE_MACHINE_IA64 0x0200
17
18 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
19
20 #define IMAGE_SCN_TYPE_NOLOAD 0x00000002
21 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008
22 #define IMAGE_SCN_CNT_CODE 0x00000020
23 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
24 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
25 #define IMAGE_SCN_LNK_OTHER 0x00000100
26 #define IMAGE_SCN_LNK_INFO 0x00000200
27 #define IMAGE_SCN_LNK_REMOVE 0x00000800
28 #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000
29 #define IMAGE_SCN_GPREL 0x00008000
30 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
31 #define IMAGE_SCN_MEM_LOCKED 0x00040000
32 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
33 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
34 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
35 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
36 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
37 #define IMAGE_SCN_MEM_SHARED 0x10000000
38 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
39 #define IMAGE_SCN_MEM_READ 0x40000000
40 #define IMAGE_SCN_MEM_WRITE 0x80000000
41
42 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
43
44 #define IMAGE_REL_I386_ABSOLUTE 0x0001
45 #define IMAGE_REL_I386_DIR32 0x0006
46
47 typedef unsigned char BYTE;
48 typedef unsigned char UCHAR;
49 typedef unsigned short WORD;
50 typedef short SHORT;
51 typedef unsigned short USHORT;
52 typedef unsigned long long ULONGLONG;
53
54 #if defined(__x86_64__) && !defined(_WIN64)
55 typedef signed int LONG;
56 typedef unsigned int ULONG;
57 typedef unsigned int DWORD;
58 #else
59 typedef signed long LONG;
60 typedef unsigned long ULONG;
61 typedef unsigned long DWORD;
62 #endif
63 #if defined(_WIN64)
64 typedef unsigned __int64 ULONG_PTR;
65 #else
66 #if defined(__x86_64__) && !defined(_WIN64)
67 typedef unsigned int ULONG_PTR;
68 #else
69 typedef unsigned long ULONG_PTR;
70 #endif
71 #endif
72
73 #pragma pack(push,2)
74 typedef struct _IMAGE_DOS_HEADER {
75 WORD e_magic;
76 WORD e_cblp;
77 WORD e_cp;
78 WORD e_crlc;
79 WORD e_cparhdr;
80 WORD e_minalloc;
81 WORD e_maxalloc;
82 WORD e_ss;
83 WORD e_sp;
84 WORD e_csum;
85 WORD e_ip;
86 WORD e_cs;
87 WORD e_lfarlc;
88 WORD e_ovno;
89 WORD e_res[4];
90 WORD e_oemid;
91 WORD e_oeminfo;
92 WORD e_res2[10];
93 LONG e_lfanew;
94 } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
95 #pragma pack(pop)
96
97 #pragma pack(push,4)
98 typedef struct _IMAGE_FILE_HEADER {
99 WORD Machine;
100 WORD NumberOfSections;
101 DWORD TimeDateStamp;
102 DWORD PointerToSymbolTable;
103 DWORD NumberOfSymbols;
104 WORD SizeOfOptionalHeader;
105 WORD Characteristics;
106 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
107 #pragma pack(pop)
108
109 typedef struct _IMAGE_DATA_DIRECTORY {
110 DWORD VirtualAddress;
111 DWORD Size;
112 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
113
114 typedef struct _IMAGE_OPTIONAL_HEADER32 {
115 WORD Magic;
116 BYTE MajorLinkerVersion;
117 BYTE MinorLinkerVersion;
118 DWORD SizeOfCode;
119 DWORD SizeOfInitializedData;
120 DWORD SizeOfUninitializedData;
121 DWORD AddressOfEntryPoint;
122 DWORD BaseOfCode;
123 DWORD BaseOfData;
124 DWORD ImageBase;
125 DWORD SectionAlignment;
126 DWORD FileAlignment;
127 WORD MajorOperatingSystemVersion;
128 WORD MinorOperatingSystemVersion;
129 WORD MajorImageVersion;
130 WORD MinorImageVersion;
131 WORD MajorSubsystemVersion;
132 WORD MinorSubsystemVersion;
133 DWORD Win32VersionValue;
134 DWORD SizeOfImage;
135 DWORD SizeOfHeaders;
136 DWORD CheckSum;
137 WORD Subsystem;
138 WORD DllCharacteristics;
139 DWORD SizeOfStackReserve;
140 DWORD SizeOfStackCommit;
141 DWORD SizeOfHeapReserve;
142 DWORD SizeOfHeapCommit;
143 DWORD LoaderFlags;
144 DWORD NumberOfRvaAndSizes;
145 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
146 } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
147
148 typedef struct _IMAGE_OPTIONAL_HEADER64 {
149 WORD Magic;
150 BYTE MajorLinkerVersion;
151 BYTE MinorLinkerVersion;
152 DWORD SizeOfCode;
153 DWORD SizeOfInitializedData;
154 DWORD SizeOfUninitializedData;
155 DWORD AddressOfEntryPoint;
156 DWORD BaseOfCode;
157 ULONGLONG ImageBase;
158 DWORD SectionAlignment;
159 DWORD FileAlignment;
160 WORD MajorOperatingSystemVersion;
161 WORD MinorOperatingSystemVersion;
162 WORD MajorImageVersion;
163 WORD MinorImageVersion;
164 WORD MajorSubsystemVersion;
165 WORD MinorSubsystemVersion;
166 DWORD Win32VersionValue;
167 DWORD SizeOfImage;
168 DWORD SizeOfHeaders;
169 DWORD CheckSum;
170 WORD Subsystem;
171 WORD DllCharacteristics;
172 ULONGLONG SizeOfStackReserve;
173 ULONGLONG SizeOfStackCommit;
174 ULONGLONG SizeOfHeapReserve;
175 ULONGLONG SizeOfHeapCommit;
176 DWORD LoaderFlags;
177 DWORD NumberOfRvaAndSizes;
178 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
179 } IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
180
181 #ifdef _TARGET_PE64
182 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
183 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
184 #else
185 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
186 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
187 #endif
188
189 typedef struct _IMAGE_SECTION_HEADER {
190 BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
191 union {
192 DWORD PhysicalAddress;
193 DWORD VirtualSize;
194 } Misc;
195 DWORD VirtualAddress;
196 DWORD SizeOfRawData;
197 DWORD PointerToRawData;
198 DWORD PointerToRelocations;
199 DWORD PointerToLinenumbers;
200 WORD NumberOfRelocations;
201 WORD NumberOfLinenumbers;
202 DWORD Characteristics;
203 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
204
205 #pragma pack(push,4)
206 typedef struct _IMAGE_BASE_RELOCATION {
207 DWORD VirtualAddress;
208 DWORD SizeOfBlock;
209 WORD TypeOffset[1];
210 } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
211 #pragma pack(pop)
212
213 #ifndef UNALIGNED
214 #define UNALIGNED
215 #endif
216
217 #pragma pack(push,2)
218 typedef struct _IMAGE_RELOCATION {
219 union {
220 DWORD VirtualAddress;
221 DWORD RelocCount;
222 };
223 DWORD SymbolTableIndex;
224 WORD Type;
225 } IMAGE_RELOCATION;
226 typedef struct _IMAGE_RELOCATION UNALIGNED *PIMAGE_RELOCATION;
227 #pragma pack(pop)
228
229 #pragma pack(push,2)
230 typedef struct _IMAGE_SYMBOL {
231 union {
232 BYTE ShortName[8];
233 struct {
234 DWORD Short;
235 DWORD Long;
236 } Name;
237 DWORD LongName[2];
238 } N;
239 DWORD Value;
240 SHORT SectionNumber;
241 WORD Type;
242 BYTE StorageClass;
243 BYTE NumberOfAuxSymbols;
244 } IMAGE_SYMBOL;
245 typedef struct _IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;
246 #pragma pack(pop)