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
| ---
TpiStream:
Records:
# int* [Index: 0x1000]
- Kind: LF_POINTER
Pointer:
ReferentType: 116 # int
Attrs: 32778
# const int* [Index: 0x1001]
- Kind: LF_MODIFIER
Modifier:
ModifiedType: 0x1000
Modifiers: [ Const ]
# char* [Index: 0x1002]
- Kind: LF_POINTER
Pointer:
ReferentType: 1136 # char*
Attrs: 32778
# (int, char **) [Index: 0x1003]
- Kind: LF_ARGLIST
ArgList:
ArgIndicies: [ 116, 0x1002 ]
# (int, double) [Index: 0x1004]
- Kind: LF_ARGLIST
ArgList:
ArgIndicies: [ 116, 65 ] # (int, double)
# int main(int argc, char **argv) [Index: 0x1005]
- Kind: LF_PROCEDURE
Procedure:
ReturnType: 117 # int
CallConv: NearC # __cdecl
Options: [ None ]
ParameterCount: 2
ArgumentList: 0x1003 # (int, char**)
# <label> [Index: 0x1006]
- Kind: LF_LABEL
Label:
Mode: Near
# <forward decl>
# class FooClass; [Index: 0x1007]
- Kind: LF_STRUCTURE
Class:
MemberCount: 0
Options: [ None, ForwardReference ]
FieldList: 0
Name: 'FooClass'
DerivationList: 0
VTableShape: 0
Size: 0
# char* [Index: 0x1008]
- Kind: LF_POINTER
Pointer:
ReferentType: 0x1007 # FooClass
Attrs: 33802 # const
# int (FooClass::)(int, char **) [Index: 0x1009]
- Kind: LF_MFUNCTION
MemberFunction:
ReturnType: 116 # int
ClassType: 0x1007 # FooClass
ThisType: 0x1008 # const FooClass*
CallConv: ThisCall
Options: [ None ]
ParameterCount: 2
ArgumentList: 0x1003 # (int, char**)
ThisPointerAdjustment: 0
# int (FooClass::)(int, double) [Index: 0x100A]
- Kind: LF_MFUNCTION
MemberFunction:
ReturnType: 116 # int
ClassType: 0x1007 # FooClass
ThisType: 0x1008 # const FooClass*
CallConv: ThisCall
Options: [ None ]
ParameterCount: 2
ArgumentList: 0x1004 # (int, double)
ThisPointerAdjustment: 0
# <method overload list>
# int (FooClass::)(int, char **)
# int (FooClass::)(int, double) [Index: 0x100B]
- Kind: LF_METHODLIST
MethodOverloadList:
Methods:
- Type: 0x1009 # int (FooClass::)(int, char **)
Attrs: 3 # public
VFTableOffset: -1
Name: ''
- Type: 0x100A # int (FooClass::)(int, double)
Attrs: 3 # public
VFTableOffset: -1
Name: ''
# <Field List>
# A, B, C [Index: 0x100C]
- Kind: LF_FIELDLIST
FieldList:
- Kind: LF_ENUMERATE
Enumerator:
Attrs: 3
Value: 0
Name: A
- Kind: LF_ENUMERATE
Enumerator:
Attrs: 3
Value: 1
Name: B
- Kind: LF_ENUMERATE
Enumerator:
Attrs: 3
Value: 2
Name: C
# enum FooClass::Enum : uint32_t {
# A, B, C
# }; [Index: 0x100D]
- Kind: LF_ENUM
Enum:
NumEnumerators: 3
Options: [ None, Nested ]
FieldList: 0x100C
Name: 'FooClass::Enum'
UnderlyingType: 117
# <Field List>
# public:
# enum FooEnum : uint32_t {
# A, B, C
# };
# FooEnum EnumMember;
# static int StaticInt;
# int FooClass::OverloadedMethod(int, char **);
# int FooClass::OverloadedMethod(int, double);
# int FooClass::RegularMethod(int, double);
# [Index: 0x100E]
- Kind: LF_FIELDLIST
FieldList:
# enum FooEnum : uint32_t {
# A, B, C
# };
- Kind: LF_NESTTYPE
NestedType:
Type: 0x100D
Name: FooEnum
# FooEnum EnumMember;
- Kind: LF_MEMBER
DataMember:
Attrs: 3 # public
Type: 0x100D # void*
FieldOffset: 0
Name: EnumMember
# static int StaticInt;
- Kind: LF_STMEMBER
StaticDataMember:
Attrs: 3 # public
Type: 116 # int
Name: StaticInt
# int FooClass::OverloadedMethod(int, char **);
# int FooClass::OverloadedMethod(int, double);
- Kind: LF_METHOD
OverloadedMethod:
NumOverloads: 2
MethodList: 0x100B
Name: OverloadedMethod
# int FooClass::RegularMethod(int, double);
- Kind: LF_ONEMETHOD
OneMethod:
Type: 0x100A
Attrs: 3 # public
VFTableOffset: -1
Name: RegularMethod
# class FooClass {
# public:
# enum FooEnum : uint32_t {
# A, B, C
# };
# FooEnum EnumMember;
# static int StaticInt;
# int FooClass::OverloadedMethod(int, char **);
# int FooClass::OverloadedMethod(int, double);
# int FooClass::RegularMethod(int, double);
# }; [Index: 0x100F]
- Kind: LF_CLASS
Class:
MemberCount: 6
Options: [ None ]
FieldList: 0x100E
Name: 'FooClass'
DerivationList: 0
VTableShape: 0
Size: 4
# struct FooStructure; [Index: 0x1010]
- Kind: LF_STRUCTURE
Class:
MemberCount: 6
Options: [ None ]
FieldList: 0x100E
Name: 'FooStructure'
DerivationList: 0
VTableShape: 0
Size: 4
# interface FooInterface; [Index: 0x1011]
- Kind: LF_INTERFACE
Class:
MemberCount: 6
Options: [ None ]
FieldList: 0x100E
Name: 'FooInterface'
DerivationList: 0
VTableShape: 0
Size: 4
# <field list>
# : public FooClass [Index: 0x1012]
- Kind: LF_FIELDLIST
FieldList:
- Kind: LF_BCLASS
Attrs: 3 # public
Type: 0x100F # FooClass
Offset: 0
# <field list>
# : public virtual FooClass [Index: 0x1013]
- Kind: LF_FIELDLIST
FieldList:
- Kind: LF_VBCLASS
Attrs: 3 # public
BaseType: 0x100F # FooClass
VBPtrType: 0x1001 # const int *
VBPtrOffset: 0
VTableIndex: 1
# struct Inherit : public FooClass {}; [Index: 0x1014]
- Kind: LF_STRUCTURE
Class:
MemberCount: 1
Options: [ None ]
FieldList: 0x100E
Name: 'Inherit'
DerivationList: 0x1012
VTableShape: 0
Size: 4
# class VInherit : public virtual FooClass {}; [Index: 0x1015]
- Kind: LF_STRUCTURE
Class:
MemberCount: 1
Options: [ None ]
FieldList: 0x100E
Name: 'Inherit'
DerivationList: 0x1012
VTableShape: 0
Size: 4
# const volatile enum FooClass::Enum : uint32_t { [Index: 0x1016]
- Kind: LF_MODIFIER
Modifier:
ModifiedType: 0x100D
Modifiers: [ Const, Volatile ]
# const volatile struct Inherit : public FooClass {} { [Index: 0x1017]
- Kind: LF_MODIFIER
Modifier:
ModifiedType: 0x1014
Modifiers: [ Const, Volatile ]
# const volatile class FooClass { [Index: 0x1018]
- Kind: LF_MODIFIER
Modifier:
ModifiedType: 0x100F
Modifiers: [ Const, Volatile ]
# const volatile interface FooInterface { [Index: 0x1019]
- Kind: LF_MODIFIER
Modifier:
ModifiedType: 0x1011
Modifiers: [ Const, Volatile ]
# // Member type records. These are generally not length prefixed, and appear
# // inside of a field list record.
# MEMBER_RECORD(LF_VFUNCTAB, 0x1409, VFPtr)
# MEMBER_RECORD_ALIAS(LF_BINTERFACE, 0x151a, BaseInterface, BaseClass)
# MEMBER_RECORD_ALIAS(LF_IVBCLASS, 0x1402, IndirectVirtualBaseClass,
# VirtualBaseClass)
# TYPE_RECORD(LF_ARRAY, 0x1503, Array)
# TYPE_RECORD(LF_UNION, 0x1506, Union)
# TYPE_RECORD(LF_TYPESERVER2, 0x1515, TypeServer2)
# TYPE_RECORD(LF_VFTABLE, 0x151d, VFTable)
# TYPE_RECORD(LF_VTSHAPE, 0x000a, VFTableShape)
# TYPE_RECORD(LF_BITFIELD, 0x1205, BitField)
# // ID leaf records. Subsequent leaf types may be referenced from .debug$S.
# TYPE_RECORD(LF_FUNC_ID, 0x1601, FuncId)
# TYPE_RECORD(LF_MFUNC_ID, 0x1602, MemberFuncId)
# TYPE_RECORD(LF_BUILDINFO, 0x1603, BuildInfo)
# TYPE_RECORD(LF_SUBSTR_LIST, 0x1604, StringList)
# TYPE_RECORD(LF_STRING_ID, 0x1605, StringId)
# TYPE_RECORD(LF_UDT_SRC_LINE, 0x1606, UdtSourceLine)
# TYPE_RECORD(LF_UDT_MOD_SRC_LINE, 0x1607, UdtModSourceLine)
|