retdec
rtti_msvc.h
Go to the documentation of this file.
1 
10 #ifndef RETDEC_RTTI_FINDER_RTTI_RTTI_MSVC_H
11 #define RETDEC_RTTI_FINDER_RTTI_RTTI_MSVC_H
12 
13 #include <cstdint>
14 #include <map>
15 #include <vector>
16 
17 #include "retdec/common/address.h"
18 
19 namespace retdec {
20 namespace rtti_finder {
21 
22 class RTTICompleteObjectLocator;
23 class RTTITypeDescriptor;
24 class RTTIClassHierarchyDescriptor;
25 class RTTIBaseClassDescriptor;
26 
31 {
32  // ABI specification.
33  //
34  public:
40  std::string name;
41 
42  // Our methods and data.
43  //
44  public:
49 };
50 
56 {
57  // ABI specification.
58  //
59  public:
60  struct PMD
61  {
63  int32_t mdisp = 0;
65  int32_t pdisp = 0;
67  int32_t vdisp = 0;
68  };
69 
70  public:
74  uint32_t numContainedBases = 0;
78  uint32_t attributes = 0;
79 
80  // Our methods and data.
81  //
82  public:
87 };
88 
94 {
95  // ABI specification.
96  //
97  public:
99  uint32_t signature = 0;
101  uint32_t attributes = 0;
103  uint32_t numBaseClasses = 0;
106 
107  // Our methods and data.
108  //
109  public:
114  std::vector<retdec::common::Address> baseClassArray;
118  std::vector<RTTIBaseClassDescriptor*> baseClasses;
119 };
120 
127 {
128  // ABI specification.
129  //
130  public:
132  uint32_t signature = 0;
134  uint32_t offset = 0;
136  uint32_t cdOffset = 0;
141 
142  // Our methods and data.
143  //
144  public:
152 };
153 
157 class RttiMsvc
158 {
159  public:
160  std::map<retdec::common::Address, RTTICompleteObjectLocator> objLocators;
161  std::map<retdec::common::Address, RTTITypeDescriptor> typeDescriptors;
162  std::map<retdec::common::Address, RTTIBaseClassDescriptor> baseClassDescriptors;
163  std::map<retdec::common::Address, RTTIClassHierarchyDescriptor> classDescriptors;
164 };
165 
166 } // namespace rtti_finder
167 } // namespace retdec
168 
169 #endif
Definition: address.h:21
uint32_t attributes
Flags, usually 0.
Definition: rtti_msvc.h:78
PMD where
Pointer-to-member displacement info.
Definition: rtti_msvc.h:76
uint32_t numContainedBases
Number of nested classes following in the Base Class Array.
Definition: rtti_msvc.h:74
RTTITypeDescriptor * typeDescriptor
RTTITypeDescriptor object on address typeDescriptorAddr.
Definition: rtti_msvc.h:86
retdec::common::Address typeDescriptorAddr
Type descriptor of the class.
Definition: rtti_msvc.h:72
retdec::common::Address address
Position of this RTTIBaseClassDescriptor entry.
Definition: rtti_msvc.h:84
uint32_t attributes
Bit 0 set = multiple inheritance, bit 1 set = virtual inheritance.
Definition: rtti_msvc.h:101
std::vector< RTTIBaseClassDescriptor * > baseClasses
Definition: rtti_msvc.h:118
uint32_t signature
Always zero?
Definition: rtti_msvc.h:99
std::vector< retdec::common::Address > baseClassArray
Definition: rtti_msvc.h:114
uint32_t numBaseClasses
Number of classes in pBaseClassArray.
Definition: rtti_msvc.h:103
retdec::common::Address baseClassArrayAddr
Address of base class objects array.
Definition: rtti_msvc.h:105
retdec::common::Address address
Position of this RTTIClassHierarchyDescriptor entry.
Definition: rtti_msvc.h:111
uint32_t offset
Offset of this vtable in the complete class.
Definition: rtti_msvc.h:134
RTTIClassHierarchyDescriptor * classDescriptor
Definition: rtti_msvc.h:151
RTTITypeDescriptor * typeDescriptor
RTTITypeDescriptor object on address typeDescriptorAddr.
Definition: rtti_msvc.h:148
retdec::common::Address typeDescriptorAddr
Pointer (address) of type descriptor for this object.
Definition: rtti_msvc.h:138
uint32_t cdOffset
Constructor displacement offset.
Definition: rtti_msvc.h:136
uint32_t signature
Always zero?
Definition: rtti_msvc.h:132
retdec::common::Address classDescriptorAddr
Pointer (address) of class descriptor for this object.
Definition: rtti_msvc.h:140
retdec::common::Address address
Position of this RTTICompleteObjectLocator entry.
Definition: rtti_msvc.h:146
Definition: rtti_msvc.h:31
std::string name
Mangled type name, e.g. ".H" = "int", ".?AVA@@" = "class A".
Definition: rtti_msvc.h:40
retdec::common::Address vtableAddr
Virtual table of type_info class.
Definition: rtti_msvc.h:36
retdec::common::Address spare
Used to keep the demangled name returned by type_info::name()
Definition: rtti_msvc.h:38
retdec::common::Address address
Position of this RTTITypeDescriptor entry.
Definition: rtti_msvc.h:46
Definition: rtti_msvc.h:158
std::map< retdec::common::Address, RTTIClassHierarchyDescriptor > classDescriptors
Definition: rtti_msvc.h:163
std::map< retdec::common::Address, RTTIBaseClassDescriptor > baseClassDescriptors
Definition: rtti_msvc.h:162
std::map< retdec::common::Address, RTTITypeDescriptor > typeDescriptors
Definition: rtti_msvc.h:161
std::map< retdec::common::Address, RTTICompleteObjectLocator > objLocators
Definition: rtti_msvc.h:160
Address, address pair and other derived class representation.
Definition: archive_wrapper.h:19
int32_t mdisp
Member displacement.
Definition: rtti_msvc.h:63
int32_t pdisp
Vbtable displacement.
Definition: rtti_msvc.h:65
int32_t vdisp
Displacement inside vbtable.
Definition: rtti_msvc.h:67