retdec
visual_basic_structures.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_TYPES_VISUAL_BASIC_VISUAL_BASIC_STRUCTURES_H
8 #define RETDEC_FILEFORMAT_TYPES_VISUAL_BASIC_VISUAL_BASIC_STRUCTURES_H
9 
10 #include <string>
11 
12 namespace retdec {
13 namespace fileformat {
14 
15 constexpr std::size_t VBHEADER_SIGNATURE = 0x21354256;
16 constexpr std::size_t VB_MAX_STRING_LEN = 100;
17 
19 {
20  internal = 0x6,
21  external = 0x7
22 };
23 
24 struct VBHeader
25 {
26  std::uint32_t signature;
27  std::uint16_t runtimeBuild;
28  std::uint8_t languageDLL[14];
29  std::uint8_t backupLanguageDLL[14];
30  std::uint16_t runtimeDLLVersion;
31  std::uint32_t LCID1;
32  std::uint32_t LCID2;
33  std::uint32_t subMainAddr;
34  std::uint32_t projectInfoAddr;
35  std::uint32_t MDLIntObjsFlags;
36  std::uint32_t MDLIntObjsFlags2;
37  std::uint32_t threadFlags;
38  std::uint32_t nThreads;
39  std::uint16_t nForms;
40  std::uint16_t nExternals;
41  std::uint32_t nThunks;
42  std::uint32_t GUITableAddr;
43  std::uint32_t externalTableAddr;
44  std::uint32_t COMRegisterDataAddr;
45  std::uint32_t projExeNameOffset;
46  std::uint32_t projDescOffset;
47  std::uint32_t helpFileOffset;
48  std::uint32_t projNameOffset;
49 
50  static std::size_t structureSize()
51  {
52  return
53  sizeof(signature) + sizeof(runtimeBuild) + sizeof(languageDLL) +
54  sizeof(backupLanguageDLL) + sizeof(runtimeDLLVersion) + sizeof(LCID1) +
55  sizeof(LCID2) + sizeof(subMainAddr) + sizeof(projectInfoAddr) +
56  sizeof(MDLIntObjsFlags) + sizeof(MDLIntObjsFlags2) + sizeof(threadFlags) +
57  sizeof(nThreads) + sizeof(nForms) + sizeof(nExternals) +
58  sizeof(nThunks) + sizeof(GUITableAddr) + sizeof(externalTableAddr) +
59  sizeof(COMRegisterDataAddr) + sizeof(projExeNameOffset) + sizeof(projDescOffset) +
60  sizeof(helpFileOffset) + sizeof(projNameOffset);
61  }
62 };
63 
64 struct VBProjInfo
65 {
66  std::uint32_t version;
67  std::uint32_t objectTableAddr;
68  std::uint32_t null;
69  std::uint32_t codeStartAddr;
70  std::uint32_t codeEndAddr;
71  std::uint32_t dataSize;
72  std::uint32_t threadSpaceAddr;
73  std::uint32_t exHandlerAddr;
74  std::uint32_t nativeCodeAddr;
75  std::uint8_t pathInformation[528];
76  std::uint32_t externalTableAddr;
77  std::uint32_t nExternals;
78 
79  static std::size_t structureSize()
80  {
81  return
82  sizeof(version) + sizeof(objectTableAddr) + sizeof(null)
83  + sizeof(codeStartAddr) + sizeof(codeEndAddr) + sizeof(dataSize)
84  + sizeof(threadSpaceAddr) + sizeof(exHandlerAddr) + sizeof(nativeCodeAddr)
85  + sizeof(pathInformation) + sizeof(externalTableAddr) + sizeof(nExternals);
86  }
87 };
88 
90 {
91  std::uint32_t null1;
92  std::uint32_t execCOMAddr;
93  std::uint32_t projecInfo2Addr;
94  std::uint32_t reserved;
95  std::uint32_t null2;
96  std::uint32_t projectObjectAddr;
97  std::uint8_t objectGUID[16];
98  std::uint16_t flagsCompileState;
99  std::uint16_t nObjects;
100  std::uint16_t nCompiledObjects;
101  std::uint16_t nUsedObjects;
102  std::uint32_t objectDescriptorsAddr;
103  std::uint32_t IDE1;
104  std::uint32_t IDE2;
105  std::uint32_t IDE3;
106  std::uint32_t projectNameAddr;
107  std::uint32_t LCID1;
108  std::uint32_t LCID2;
109  std::uint32_t IDE4;
110  std::uint32_t templateVesion;
111 
112  static std::size_t structureSize()
113  {
114  return
115  sizeof(null1) + sizeof(execCOMAddr) + sizeof(projecInfo2Addr) + sizeof(reserved) +
116  sizeof(null2) + sizeof(projectObjectAddr) + sizeof(objectGUID) + sizeof(flagsCompileState) +
117  sizeof(nObjects) + sizeof(nCompiledObjects) + sizeof(nUsedObjects) +
118  sizeof(objectDescriptorsAddr) + sizeof(IDE1) + sizeof(IDE2) + sizeof(IDE3) +
119  sizeof(projectNameAddr) + sizeof(LCID1) + sizeof(LCID2) + sizeof(IDE4) +
120  sizeof(templateVesion);
121  }
122 };
123 
125 {
126  std::uint32_t objectInfoAddr;
127  std::uint32_t reserved;
128  std::uint32_t publicBytesAddr;
129  std::uint32_t staticBytesAddr;
130  std::uint32_t modulePublicAddr;
131  std::uint32_t moduleStaticAddr;
132  std::uint32_t objectNameAddr;
133  std::uint32_t nMethods;
134  std::uint32_t methodNamesAddr;
135  std::uint32_t staticVarsCopyAddr;
136  std::uint32_t objectType;
137  std::uint32_t null;
138 
139  static std::size_t structureSize()
140  {
141  return
142  sizeof(objectInfoAddr) + sizeof(reserved) + sizeof(publicBytesAddr) +
143  sizeof(staticBytesAddr) + sizeof(modulePublicAddr) + sizeof(moduleStaticAddr) +
144  sizeof(objectNameAddr) + sizeof(nMethods) + sizeof(methodNamesAddr) +
145  sizeof(staticVarsCopyAddr) + sizeof(objectType) + sizeof(null);
146  }
147 };
148 
150 {
151  std::uint32_t type;
152  std::uint32_t importDataAddr;
153 
154  static std::size_t structureSize()
155  {
156  return sizeof(type) + sizeof(importDataAddr);
157  }
158 };
159 
161 {
162  std::uint32_t moduleNameAddr;
163  std::uint32_t apiNameAddr;
164 
165  static std::size_t structureSize()
166  {
167  return sizeof(moduleNameAddr) + sizeof(apiNameAddr);
168  }
169 };
170 
172 {
173  std::uint32_t regInfoOffset;
174  std::uint32_t projNameOffset;
175  std::uint32_t helpFileOffset;
176  std::uint32_t projDescOffset;
177  std::uint8_t projCLSID[16];
178  std::uint32_t projTlbLCID;
179  std::uint16_t unknown;
180  std::uint16_t tlbVerMajor;
181  std::uint16_t tlbVerMinor;
182 
183  static std::size_t structureSize()
184  {
185  return
186  sizeof(regInfoOffset) + sizeof(projNameOffset) + sizeof(helpFileOffset) +
187  sizeof(projDescOffset) + sizeof(projCLSID) + sizeof(projTlbLCID) +
188  sizeof(unknown) + sizeof(tlbVerMajor) + sizeof(tlbVerMinor);
189  }
190 };
191 
193 {
194  std::uint32_t ifInfoOffset;
195  std::uint32_t objNameOffset;
196  std::uint32_t objDescOffset;
197  std::uint32_t instancing;
198  std::uint32_t objID;
199  std::uint8_t objCLSID[16];
200  std::uint32_t isInterfaceFlag;
201  std::uint32_t ifCLSIDOffset;
202  std::uint32_t eventCLSIDOffset;
203  std::uint32_t hasEvents;
204  std::uint32_t olemicsFlags;
205  std::uint8_t classType;
206  std::uint8_t objectType;
207  std::uint16_t toolboxBitmap32;
208  std::uint16_t defaultIcon;
209  std::uint16_t isDesignerFlag;
210  std::uint32_t designerDataOffset;
211 
212  static std::size_t structureSize()
213  {
214  return
215  sizeof(ifInfoOffset) + sizeof(objNameOffset) + sizeof(objDescOffset) +
216  sizeof(instancing) + sizeof(objID) + sizeof(objCLSID) + sizeof(isInterfaceFlag) +
217  sizeof(ifCLSIDOffset) + sizeof(eventCLSIDOffset) + sizeof(hasEvents) +
218  sizeof(olemicsFlags) + sizeof(classType) + sizeof(objectType) +
219  sizeof(toolboxBitmap32) + sizeof(defaultIcon) + sizeof(isDesignerFlag) +
220  sizeof(designerDataOffset);
221  }
222 };
223 
224 } // namespace fileformat
225 } // namespace retdec
226 
227 #endif
VBExternTableEntryType
Definition: visual_basic_structures.h:19
constexpr std::size_t VBHEADER_SIGNATURE
Definition: visual_basic_structures.h:15
constexpr std::size_t VB_MAX_STRING_LEN
Definition: visual_basic_structures.h:16
Definition: archive_wrapper.h:19
Definition: visual_basic_structures.h:172
std::uint16_t unknown
unknown
Definition: visual_basic_structures.h:179
std::uint16_t tlbVerMinor
TypeLib minor version.
Definition: visual_basic_structures.h:181
std::uint32_t helpFileOffset
Help file offset.
Definition: visual_basic_structures.h:175
std::uint32_t regInfoOffset
Registration Info offset.
Definition: visual_basic_structures.h:173
std::uint32_t projNameOffset
Project/TypeLib name offset.
Definition: visual_basic_structures.h:174
std::uint16_t tlbVerMajor
TypeLib major version.
Definition: visual_basic_structures.h:180
std::uint32_t projTlbLCID
TypeLib library LCID.
Definition: visual_basic_structures.h:178
static std::size_t structureSize()
Definition: visual_basic_structures.h:183
std::uint32_t projDescOffset
Project description offset.
Definition: visual_basic_structures.h:176
std::uint8_t projCLSID[16]
Project/TypeLib CLSID.
Definition: visual_basic_structures.h:177
Definition: visual_basic_structures.h:193
std::uint16_t defaultIcon
Minimized icon of control window.
Definition: visual_basic_structures.h:208
std::uint32_t hasEvents
Specifies whether Event CLSID is valid.
Definition: visual_basic_structures.h:203
std::uint32_t eventCLSIDOffset
Event CLSID.
Definition: visual_basic_structures.h:202
std::uint8_t objectType
Object Type.
Definition: visual_basic_structures.h:206
std::uint32_t designerDataOffset
Offset to Designed Data.
Definition: visual_basic_structures.h:210
std::uint16_t toolboxBitmap32
Control Bitmap ID in toobox.
Definition: visual_basic_structures.h:207
std::uint32_t ifInfoOffset
Offset to COM Interface Info.
Definition: visual_basic_structures.h:194
std::uint32_t ifCLSIDOffset
Interface CLSID.
Definition: visual_basic_structures.h:201
std::uint32_t objID
Object ID within project.
Definition: visual_basic_structures.h:198
std::uint16_t isDesignerFlag
Specifies whether Designed Data offset is valid.
Definition: visual_basic_structures.h:209
static std::size_t structureSize()
Definition: visual_basic_structures.h:212
std::uint32_t objNameOffset
Offset to object name.
Definition: visual_basic_structures.h:195
std::uint32_t objDescOffset
Offset to object description.
Definition: visual_basic_structures.h:196
std::uint32_t olemicsFlags
Status.
Definition: visual_basic_structures.h:204
std::uint8_t objCLSID[16]
Object CLSID.
Definition: visual_basic_structures.h:199
std::uint32_t isInterfaceFlag
Specifies whether Interface CLSID is valid.
Definition: visual_basic_structures.h:200
std::uint8_t classType
Class Type.
Definition: visual_basic_structures.h:205
std::uint32_t instancing
Instancing mode.
Definition: visual_basic_structures.h:197
Definition: visual_basic_structures.h:161
static std::size_t structureSize()
Definition: visual_basic_structures.h:165
std::uint32_t moduleNameAddr
mode name address
Definition: visual_basic_structures.h:162
std::uint32_t apiNameAddr
api name address
Definition: visual_basic_structures.h:163
Definition: visual_basic_structures.h:150
std::uint32_t importDataAddr
import data address
Definition: visual_basic_structures.h:152
static std::size_t structureSize()
Definition: visual_basic_structures.h:154
std::uint32_t type
import type
Definition: visual_basic_structures.h:151
Definition: visual_basic_structures.h:25
std::uint32_t nThunks
number of thunks to create
Definition: visual_basic_structures.h:41
std::uint32_t projExeNameOffset
offset to the string containing EXE filename
Definition: visual_basic_structures.h:45
std::uint8_t backupLanguageDLL[14]
backup language DLL
Definition: visual_basic_structures.h:29
std::uint32_t projectInfoAddr
ProjectInfo address.
Definition: visual_basic_structures.h:34
std::uint16_t runtimeBuild
runtime flag
Definition: visual_basic_structures.h:27
std::uint32_t COMRegisterDataAddr
ComRegisterData address.
Definition: visual_basic_structures.h:44
std::uint32_t threadFlags
thread flags
Definition: visual_basic_structures.h:37
std::uint32_t LCID1
primary LCID
Definition: visual_basic_structures.h:31
std::uint16_t runtimeDLLVersion
version of the runtime DLL
Definition: visual_basic_structures.h:30
std::uint32_t LCID2
backup LCID
Definition: visual_basic_structures.h:32
std::uint32_t projDescOffset
offset to the string containing project's description
Definition: visual_basic_structures.h:46
std::uint32_t MDLIntObjsFlags2
VB controll flags for IDs > 32.
Definition: visual_basic_structures.h:36
std::uint32_t projNameOffset
offset to the string containing project's name
Definition: visual_basic_structures.h:48
std::uint32_t externalTableAddr
ExternalTable address.
Definition: visual_basic_structures.h:43
std::uint32_t subMainAddr
sub main code address
Definition: visual_basic_structures.h:33
std::uint32_t signature
"VB5!" signature
Definition: visual_basic_structures.h:26
std::uint16_t nExternals
number of external OCX components
Definition: visual_basic_structures.h:40
std::uint32_t GUITableAddr
GUITable address.
Definition: visual_basic_structures.h:42
std::uint8_t languageDLL[14]
language DLL
Definition: visual_basic_structures.h:28
std::uint32_t MDLIntObjsFlags
VB controll flags for IDs < 32.
Definition: visual_basic_structures.h:35
std::uint32_t helpFileOffset
offset to the string containing name of the Help file
Definition: visual_basic_structures.h:47
static std::size_t structureSize()
Definition: visual_basic_structures.h:50
std::uint32_t nThreads
number of threads to support in pool
Definition: visual_basic_structures.h:38
std::uint16_t nForms
number of forms in this application
Definition: visual_basic_structures.h:39
Definition: visual_basic_structures.h:90
std::uint32_t templateVesion
template version
Definition: visual_basic_structures.h:110
std::uint32_t projectNameAddr
project name address
Definition: visual_basic_structures.h:106
std::uint32_t projectObjectAddr
In-memory data address.
Definition: visual_basic_structures.h:96
std::uint32_t IDE3
IDE3 internals.
Definition: visual_basic_structures.h:105
std::uint32_t objectDescriptorsAddr
Object descriptos address.
Definition: visual_basic_structures.h:102
std::uint16_t nUsedObjects
number of used objects
Definition: visual_basic_structures.h:101
std::uint16_t nCompiledObjects
number of compiled objects
Definition: visual_basic_structures.h:100
static std::size_t structureSize()
Definition: visual_basic_structures.h:112
std::uint32_t projecInfo2Addr
Project Info 2 address.
Definition: visual_basic_structures.h:93
std::uint8_t objectGUID[16]
Object table GUID.
Definition: visual_basic_structures.h:97
std::uint32_t null2
null
Definition: visual_basic_structures.h:95
std::uint32_t IDE4
IDE4 internals.
Definition: visual_basic_structures.h:109
std::uint32_t reserved
reserved
Definition: visual_basic_structures.h:94
std::uint32_t IDE1
IDE1 internals.
Definition: visual_basic_structures.h:103
std::uint32_t null1
null
Definition: visual_basic_structures.h:91
std::uint16_t nObjects
number of objects
Definition: visual_basic_structures.h:99
std::uint32_t LCID2
backup LCID
Definition: visual_basic_structures.h:108
std::uint32_t LCID1
LCID.
Definition: visual_basic_structures.h:107
std::uint16_t flagsCompileState
internal compilation flags
Definition: visual_basic_structures.h:98
std::uint32_t execCOMAddr
VB Project Exec COM address.
Definition: visual_basic_structures.h:92
std::uint32_t IDE2
IDE2 internals.
Definition: visual_basic_structures.h:104
Definition: visual_basic_structures.h:65
std::uint32_t nExternals
number of external OCX components
Definition: visual_basic_structures.h:77
std::uint32_t dataSize
size of VB object structures
Definition: visual_basic_structures.h:71
std::uint8_t pathInformation[528]
path and id string, <SP6
Definition: visual_basic_structures.h:75
std::uint32_t exHandlerAddr
VBA exception handler address.
Definition: visual_basic_structures.h:73
std::uint32_t nativeCodeAddr
.DATA section address
Definition: visual_basic_structures.h:74
std::uint32_t threadSpaceAddr
eddress of address of thread object
Definition: visual_basic_structures.h:72
std::uint32_t codeEndAddr
end of code address
Definition: visual_basic_structures.h:70
std::uint32_t objectTableAddr
Object table address.
Definition: visual_basic_structures.h:67
std::uint32_t externalTableAddr
External table address.
Definition: visual_basic_structures.h:76
static std::size_t structureSize()
Definition: visual_basic_structures.h:79
std::uint32_t version
5.00 in Hex (0x1F4), version
Definition: visual_basic_structures.h:66
std::uint32_t codeStartAddr
etart of code address
Definition: visual_basic_structures.h:69
Definition: visual_basic_structures.h:125
std::uint32_t moduleStaticAddr
static DATA section address
Definition: visual_basic_structures.h:131
std::uint32_t methodNamesAddr
method names array address
Definition: visual_basic_structures.h:134
std::uint32_t staticVarsCopyAddr
static variables copy destionation offset
Definition: visual_basic_structures.h:135
std::uint32_t objectType
object type flags
Definition: visual_basic_structures.h:136
std::uint32_t publicBytesAddr
public integers address
Definition: visual_basic_structures.h:128
static std::size_t structureSize()
Definition: visual_basic_structures.h:139
std::uint32_t modulePublicAddr
public DATA section address
Definition: visual_basic_structures.h:130
std::uint32_t staticBytesAddr
static integers address
Definition: visual_basic_structures.h:129
std::uint32_t objectNameAddr
object name address
Definition: visual_basic_structures.h:132
std::uint32_t nMethods
number of methods
Definition: visual_basic_structures.h:133
std::uint32_t reserved
reserved
Definition: visual_basic_structures.h:127
std::uint32_t objectInfoAddr
Object info of this object address.
Definition: visual_basic_structures.h:126