retdec
rtti_gcc.h
Go to the documentation of this file.
1 
18 #ifndef RETDEC_RTTI_FINDER_RTTI_RTTI_GCC_H
19 #define RETDEC_RTTI_FINDER_RTTI_RTTI_GCC_H
20 
21 #include <cstdint>
22 #include <map>
23 #include <memory>
24 #include <vector>
25 
26 #include "retdec/common/address.h"
27 
28 namespace retdec {
29 namespace rtti_finder {
30 
31 class TypeInfo;
32 class ClassTypeInfo;
33 class SiClassTypeInfo;
34 class VmiClassTypeInfo;
35 class BaseClassTypeInfo;
36 
40 class TypeInfo
41 {
42  // ABI specification.
43  //
44  public:
45  virtual ~TypeInfo() = default;
46  bool operator==(const TypeInfo& o) const { return nameAddr == o.nameAddr; }
47  bool operator!=(const TypeInfo& o) const { return !(*this == o); }
48 
49  public:
54 
55  // Our methods and data.
56  //
57  public:
61  std::string name;
62 };
63 
70 class ClassTypeInfo : public TypeInfo
71 {
72  // ABI specification.
73  //
74  // empty
75 
76  // Our methods and data.
77  //
78  // nothing
79 };
80 
88 {
89  // ABI specification.
90  //
91  public:
94 
95  // Our methods and data.
96  //
97  public:
99  std::shared_ptr<ClassTypeInfo> baseClass;
100 };
101 
108 {
109  // ABI specification.
110  //
111  public:
113  {
115  DIAMOND_SHAPED_MASK = 0x2
116  };
117 
118  public:
121  uint32_t flags = 0;
123  uint32_t baseCount = 0;
124  std::vector<BaseClassTypeInfo> baseInfo;
125 
126  // Our methods and data.
127  //
128  // nothing
129 };
130 
137 {
138  // ABI specification.
139  //
140  public:
142  {
144  BASE_IS_PUBLIC = 0x2
145  };
146 
147  public:
152  uint32_t offsetFlags = 0;
153 
154  // Our methods and data.
155  //
156  public:
158  std::shared_ptr<ClassTypeInfo> baseClass;
159 };
160 
164 using RttiGcc = std::map<
166  std::shared_ptr<ClassTypeInfo>>;
167 
168 } // namespace rtti_finder
169 } // namespace retdec
170 
171 #endif
Definition: address.h:21
Definition: rtti_gcc.h:137
eOffsetFlagsMasks
Definition: rtti_gcc.h:142
@ BASE_IS_PUBLIC
Definition: rtti_gcc.h:144
@ BASE_IS_VIRTUAL
Definition: rtti_gcc.h:143
uint32_t offsetFlags
Definition: rtti_gcc.h:152
retdec::common::Address baseClassAddr
Address of the base class TypeInfo structure.
Definition: rtti_gcc.h:149
std::shared_ptr< ClassTypeInfo > baseClass
Object created for base on address baseClassAddr.
Definition: rtti_gcc.h:158
Definition: rtti_gcc.h:71
Definition: rtti_gcc.h:88
std::shared_ptr< ClassTypeInfo > baseClass
Object created for base on address baseClassAddr.
Definition: rtti_gcc.h:99
retdec::common::Address baseClassAddr
Address of the base class TypeInfo structure.
Definition: rtti_gcc.h:93
Definition: rtti_gcc.h:41
bool operator==(const TypeInfo &o) const
Definition: rtti_gcc.h:46
virtual ~TypeInfo()=default
bool operator!=(const TypeInfo &o) const
Definition: rtti_gcc.h:47
retdec::common::Address vtableAddr
Pointer (address) of virtual table for this TypeInfo instance.
Definition: rtti_gcc.h:51
retdec::common::Address nameAddr
NTBS (null-terminated byte string) address.
Definition: rtti_gcc.h:53
std::string name
String from nameAddr position.
Definition: rtti_gcc.h:61
retdec::common::Address address
Position of this TypeInfo entry.
Definition: rtti_gcc.h:59
Definition: rtti_gcc.h:108
eFlagMasks
Definition: rtti_gcc.h:113
@ DIAMOND_SHAPED_MASK
Definition: rtti_gcc.h:115
@ NON_DIAMOND_REPEAT_MASK
Definition: rtti_gcc.h:114
uint32_t baseCount
Number of direct proper base class descriptions that follow.
Definition: rtti_gcc.h:123
std::vector< BaseClassTypeInfo > baseInfo
Definition: rtti_gcc.h:124
uint32_t flags
Definition: rtti_gcc.h:121
Address, address pair and other derived class representation.
retdec::common::Address Address
Address.
Definition: types.h:36
std::map< retdec::common::Address, std::shared_ptr< ClassTypeInfo > > RttiGcc
Definition: rtti_gcc.h:166
Definition: archive_wrapper.h:19