-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcodeview.h
342 lines (299 loc) · 7.71 KB
/
codeview.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
/***************************************************************************
*
* Copyright (c) 1997, 1998 Timpanogas Research Group, Inc. All Rights
* Reserved.
*
* AUTHOR : Jeff V. Merkey
* FILE : CODEVIEW.H
* DESCRIP : Microsoft/Borland Codeview Support for MANOS v1.0
* DATE : January 10, 1998
*
***************************************************************************/
#include "types.h"
// CodeView Subsection Header Types
#define MODULE 0x120
#define TYPES 0x121
#define PUBLIC 0x122
#define PUBLIC_SYM 0x123
#define SYMBOLS 0x124
#define ALIGN_SYM 0x125
#define SRC_LINE_SEG 0x126
#define SRC_MODULE 0x127
#define LIBRARIES 0x128
#define GLOBAL_SYMS 0x129
#define GLOBAL_TYPES 0x12B
#define MPC 0x12C
#define NAMES 0x130
// CodeView Symbol Types
#define SIZE_LENGTH_FIELD 2
#define SIZE_NAME_FIELD 2
#define S_COMPILE 0x0001
#define S_REGISTER 0x0002
#define S_CONST 0x0003
#define S_UDT 0x0004
#define S_SSEARCH 0x0005
#define S_END 0x0006
#define S_SKIP 0x0007
#define S_CVRESERVE 0x0008
#define S_OBJNAME 0x0009
#define S_GPROCREF 0x0020
#define S_GDATAREF 0x0021
#define S_EDATA 0x0022
#define S_EPROC 0x0023
#define S_BPREL16 0x0100
#define S_LDATA16 0x0101
#define S_GDATA16 0x0102
#define S_PUB16 0x0103
#define S_LPROC16 0x0104
#define S_GPROC16 0x0105
#define S_THUNK16 0x0106
#define S_BLOCK16 0x0107
#define S_WITH16 0x0108
#define S_LABEL16 0x0109
#define S_CEXMODEL16 0x010A
#define S_VFTPATH16 0x010B
#define S_BPREL32 0x0200
#define S_LDATA32 0x0201
#define S_GDATA32 0x0202
#define S_PUB32 0x0203
#define S_LPROC32 0x0204
#define S_GPROC32 0x0205
#define S_THUNK32 0x0206
#define S_BLOCK32 0x0207
#define S_WITH32 0x0208
#define S_LABEL32 0x0209
#define S_CEXMODEL32 0x020A
#define S_VFTPATH32 0x020B
#define S_ENTRY32 0x0210
#define S_OPTVAR32 0x0211
#define S_PROCRET32 0x0212
#define S_SAVEREGS32 0x0213
// CodeView Leaf Indice Types
#define LF_MODIFIER 0x0001
#define LF_POINTER 0x0002
#define LF_ARRAY 0x0003
#define LF_CLASS 0x0004
#define LF_STRUCTURE 0x0005
#define LF_UNION 0x0006
#define LF_ENUM 0x0007
#define LF_PROCEDURE 0x0008
#define LF_MFUNCTION 0x0009
#define LF_VTSHAPE 0x000A
#define LF_COBOL0 0x000B
#define LF_COBOL1 0x000C
#define LF_BARRAY 0x000D
#define LF_LABEL 0x000E
#define LF_NULL 0x000F
#define LF_NOTTRAN 0x0010
#define LF_DIMARRAY 0x0011
#define LF_VFTPATH 0x0012
#define LF_SKIP 0x0200
#define LF_ARGLIST 0x0201
#define LF_DEFARG 0x0202
#define LF_LIST 0x0203
#define LF_FIELDLIST 0x0204
#define LF_DERIVED 0x0205
#define LF_BITFIELD 0x0206
#define LF_METHODLIST 0x0207
#define LF_DIMCONU 0x0208
#define LF_DIMCONLU 0x0209
#define LF_DIMVARU 0x020A
#define LF_DIMVARLU 0x020B
#define LF_REFSYM 0x020C
#define LF_BCLASS 0x0400
#define LF_VBCCLASS 0x0401
#define LF_IVBCLASS 0x0402
#define LF_ENUMERATE 0x0403
#define LF_FRIENDFCH 0x0404
#define LF_INDEX 0x0405
#define LF_MEMBER 0x0406
#define LF_STMEMBER 0x0407
#define LF_METHOD 0x0408
#define LF_NESTTYPE 0x0409
#define LF_VFUNCTAB 0x040A
#define LF_FRIENDCLS 0x040B
#define LF_NUMERIC 0x8000
#define LF_CHAR 0x8000
#define LF_SHORT 0x8001
#define LF_USHORT 0x8002
#define LF_LONG 0x8003
#define LF_ULONG 0x8004
#define LF_REAL32 0x8005
#define LF_REAL64 0x8006
#define LF_REAL80 0x8007
#define LF_REAL128 0x8008
#define LF_QUADWORD 0x8009
#define LF_NQUADWORD 0x800A
#define LF_REAL48 0x800B
#define LF_PAD0 0xF0
#define LF_PAD1 0xF1
#define LF_PAD2 0xF2
#define LF_PAD3 0xF3
#define LF_PAD4 0xF4
#define LF_PAD5 0xF5
#define LF_PAD6 0xF6
#define LF_PAD7 0xF7
#define LF_PAD8 0xF8
#define LF_PAD9 0xF9
#define LF_PAD10 0xFA
#define LF_PAD11 0xFB
#define LF_PAD12 0xFC
#define LF_PAD13 0xFD
#define LF_PAD14 0xFE
#define LF_PAD15 0xFF
//
// BORLAND CV Header Structures
//
typedef struct _DEBUG_SIGNATURE {
LONG Version;
LONG Offset;
} DEBUG_SIGNATURE;
typedef struct _SUBSECTION_HEADER {
WORD headerLength;
WORD entryLength;
LONG numberOfEntries;
LONG nextDirectory;
LONG flags;
} SUBSECTION_HEADER;
typedef struct _DIRECTORY_HEADER {
WORD directoryType;
WORD moduleIndex;
LONG entryOffset;
LONG sizeOfEntry;
} DIRECTORY_HEADER;
typedef struct _NAME_SECTION {
LONG NumberOfNames;
} NAME_SECTION;
typedef struct _SYMBOL_HEADER {
WORD length;
WORD symbolType;
} SYMBOL_HEADER;
typedef struct _NAME_HEADER {
BYTE length;
BYTE Name[1];
} NAME_HEADER;
//
// Global Symbol Table Data Structures
//
typedef struct _GLOBAL_SYM_HEADER {
LONG Reserved1;
LONG SizeOfSymbols;
LONG Reserved2;
LONG Reserved3;
LONG NumberOfUDTs;
LONG NumberOfOthers;
LONG TotalSymbols;
WORD SymbolHash;
WORD AddressHash;
} GLOBAL_SYM_HEADER;
typedef struct _DEBUGREF_TYPE {
WORD length;
WORD symbolType;
LONG Offset;
LONG Type;
LONG Name;
LONG browseOffset;
LONG symbolOffset;
LONG symbolSegment;
} DEBUGREF;
typedef struct _UDT_TYPE {
WORD length;
WORD symbolType;
LONG Type;
WORD Property;
LONG Name;
LONG bOffset;
} UDT;
typedef struct _GPROCREF_TYPE {
WORD length;
WORD symbolType;
LONG Offset;
LONG Type;
LONG Name;
LONG bOffset;
LONG cOffset;
LONG segment;
} GPROCREF;
typedef struct _GDATAREF_TYPE {
WORD length;
WORD symbolType;
LONG Offset;
LONG Type;
LONG Name;
LONG bOffset;
LONG dOffset;
LONG segment;
} GDATAREF;
typedef struct _ENTRY32_TYPE {
WORD length;
WORD symbolType;
LONG Offset;
LONG Segment;
} ENTRY32;
typedef struct _GPROC32_TYPE {
WORD length;
WORD symbolType;
LONG Parent;
LONG End;
LONG Next;
LONG ProcLength;
LONG DebugStart;
LONG DebugEnd;
LONG Offset;
WORD Segment;
LONG Type;
BYTE NearFar;
LONG Name;
} GPROC32;
typedef struct _GDATA32_TYPE {
WORD length;
WORD symbolType;
LONG Offset;
LONG Segment;
LONG Type;
LONG Name;
} GDATA32;
//
// Line Information Structures
//
typedef struct _SOURCE_HEADER {
WORD NumberOfFiles;
WORD NumberOfSegments;
} SOURCE_HEADER;
typedef struct _START_END {
LONG Start;
LONG End;
} START_END;
typedef struct _SOURCE_INDICE_TABLE {
LONG Offset;
} SOURCE_INDICE_TABLE;
typedef struct _SEGMENT_TABLE {
WORD Offset;
} SEGMENT_TABLE;
typedef struct _MODULE_INFO {
WORD Overlay;
WORD LibraryIndice;
WORD Segment;
WORD Style;
LONG Name;
LONG TimeStamp;
LONG Reserved[3];
LONG SegmentInfo[1];
} MODULE_INFO;
typedef struct _SOURCE_FILE_TABLE {
WORD NumberOfSegments;
LONG Name;
} SOURCE_FILE_TABLE;
typedef struct _BASE_SOURCE_LINE {
LONG BaseSourceLine;
} BASE_SOURCE_LINE;
typedef struct _LINE_NUMBER_DATA {
WORD Segment;
WORD NumberOfLinePairs;
} LINE_NUMBER_DATA;
typedef struct _LINE_OFFSET {
LONG Offset;
} LINE_OFFSET;
typedef struct _LINE_NUMBER {
WORD LineNumber;
} LINE_NUMBER;