retdec
dotnet_info.h
Go to the documentation of this file.
1 
7 #ifndef FILEINFO_FILE_INFORMATION_FILE_INFORMATION_TYPES_DOTNET_INFO_H
8 #define FILEINFO_FILE_INFORMATION_FILE_INFORMATION_TYPES_DOTNET_INFO_H
9 
10 #include <memory>
11 #include <string>
12 #include <vector>
13 
15 
16 namespace retdec {
17 namespace fileinfo {
18 
19 struct StreamInfo
20 {
21  std::uint64_t offset;
22  std::uint64_t size;
23 };
24 
29 {
30  private:
31  bool used;
32  std::string runtimeVersion;
33  std::uint64_t metadataHeaderAddress;
39  std::string moduleVersionId;
40  std::string typeLibId;
41  std::vector<std::shared_ptr<retdec::fileformat::DotnetClass>> definedClassList;
42  std::vector<std::shared_ptr<retdec::fileformat::DotnetClass>> importedClassList;
43  std::string typeRefHashCrc32;
44  std::string typeRefHashMd5;
45  std::string typeRefHashSha256;
46  public:
47  DotnetInfo();
48 
51  const std::string& getRuntimeVersion() const;
52  std::size_t getNumberOfImportedClasses() const;
53  std::string getImportedClassName(std::size_t position) const;
54  std::string getImportedClassNestedName(std::size_t position) const;
55  std::string getImportedClassNameWithParentClassIndex(std::size_t position) const;
56  std::string getImportedClassLibName(std::size_t position) const;
57  std::string getImportedClassNameSpace(std::size_t position) const;
58  bool getImportedClassIndex(std::size_t position, std::size_t &result) const;
59  const std::string& getTypeRefhashCrc32() const;
60  const std::string& getTypeRefhashMd5() const;
61  const std::string& getTypeRefhashSha256() const;
62  std::string getMetadataHeaderAddressStr(std::ios_base &(* format)(std::ios_base &)) const;
63  std::string getMetadataStreamOffsetStr(std::ios_base &(* format)(std::ios_base &)) const;
64  std::string getMetadataStreamSizeStr(std::ios_base &(* format)(std::ios_base &)) const;
65  std::string getStringStreamOffsetStr(std::ios_base &(* format)(std::ios_base &)) const;
66  std::string getStringStreamSizeStr(std::ios_base &(* format)(std::ios_base &)) const;
67  std::string getBlobStreamOffsetStr(std::ios_base &(* format)(std::ios_base &)) const;
68  std::string getBlobStreamSizeStr(std::ios_base &(* format)(std::ios_base &)) const;
69  std::string getGuidStreamOffsetStr(std::ios_base &(* format)(std::ios_base &)) const;
70  std::string getGuidStreamSizeStr(std::ios_base &(* format)(std::ios_base &)) const;
71  std::string getUserStringStreamOffsetStr(std::ios_base &(* format)(std::ios_base &)) const;
72  std::string getUserStringStreamSizeStr(std::ios_base &(* format)(std::ios_base &)) const;
73  const std::string& getModuleVersionId() const;
74  const std::string& getTypeLibId() const;
75  const std::vector<std::shared_ptr<retdec::fileformat::DotnetClass>>& getDefinedClassList() const;
76  const std::vector<std::shared_ptr<retdec::fileformat::DotnetClass>>& getImportedClassList() const;
78 
81  void setUsed(bool set);
82  void setRuntimeVersion(std::uint64_t majorVersion, std::uint64_t minorVersion);
83  void setMetadataHeaderAddress(std::uint64_t address);
84  void setMetadataStreamInfo(std::uint64_t offset, std::uint64_t size);
85  void setStringStreamInfo(std::uint64_t offset, std::uint64_t size);
86  void setBlobStreamInfo(std::uint64_t offset, std::uint64_t size);
87  void setGuidStreamInfo(std::uint64_t offset, std::uint64_t size);
88  void setUserStringStreamInfo(std::uint64_t offset, std::uint64_t size);
89  void setModuleVersionId(const std::string& id);
90  void setTypeLibId(const std::string& id);
91  void setDefinedClassList(const std::vector<std::shared_ptr<retdec::fileformat::DotnetClass>>& dotnetClassList);
92  void setImportedClassList(const std::vector<std::shared_ptr<retdec::fileformat::DotnetClass>>& dotnetClassList);
93  void setTypeRefhashCrc32(const std::string& crc32);
94  void setTypeRefhashMd5(const std::string& md5);
95  void setTypeRefhashSha256(const std::string& sha256);
97 
100  bool isUsed() const;
101  bool hasMetadataStream() const;
102  bool hasStringStream() const;
103  bool hasBlobStream() const;
104  bool hasGuidStream() const;
105  bool hasUserStringStream() const;
106  bool hasTypeLibId() const;
107  bool hasImportedClassListRecords() const;
109 };
110 
111 } // namespace fileinfo
112 } // namespace retdec
113 
114 #endif
Definition: dotnet_info.h:29
std::string typeLibId
Definition: dotnet_info.h:40
std::string getImportedClassName(std::size_t position) const
Definition: dotnet_info.cpp:44
const std::string & getTypeRefhashMd5() const
Definition: dotnet_info.cpp:119
void setUsed(bool set)
Definition: dotnet_info.cpp:283
StreamInfo metadataStream
Definition: dotnet_info.h:34
void setTypeRefhashSha256(const std::string &sha256)
Definition: dotnet_info.cpp:422
std::string getUserStringStreamSizeStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:238
std::string getMetadataHeaderAddressStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:138
void setModuleVersionId(const std::string &id)
Definition: dotnet_info.cpp:368
std::string getImportedClassNestedName(std::size_t position) const
Definition: dotnet_info.cpp:54
std::vector< std::shared_ptr< retdec::fileformat::DotnetClass > > importedClassList
Definition: dotnet_info.h:42
bool hasUserStringStream() const
Definition: dotnet_info.cpp:476
std::string getImportedClassNameWithParentClassIndex(std::size_t position) const
Definition: dotnet_info.cpp:64
StreamInfo blobStream
Definition: dotnet_info.h:36
const std::vector< std::shared_ptr< retdec::fileformat::DotnetClass > > & getDefinedClassList() const
Definition: dotnet_info.cpp:265
const std::vector< std::shared_ptr< retdec::fileformat::DotnetClass > > & getImportedClassList() const
Definition: dotnet_info.cpp:274
void setMetadataHeaderAddress(std::uint64_t address)
Definition: dotnet_info.cpp:304
const std::string & getTypeLibId() const
Definition: dotnet_info.cpp:256
std::string getBlobStreamOffsetStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:188
std::string getGuidStreamOffsetStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:208
void setUserStringStreamInfo(std::uint64_t offset, std::uint64_t size)
Definition: dotnet_info.cpp:358
bool hasTypeLibId() const
Definition: dotnet_info.cpp:485
bool isUsed() const
Definition: dotnet_info.cpp:431
bool hasStringStream() const
Definition: dotnet_info.cpp:449
std::size_t getNumberOfImportedClasses() const
Definition: dotnet_info.cpp:34
std::string getBlobStreamSizeStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:198
void setGuidStreamInfo(std::uint64_t offset, std::uint64_t size)
Definition: dotnet_info.cpp:347
bool hasMetadataStream() const
Definition: dotnet_info.cpp:440
void setDefinedClassList(const std::vector< std::shared_ptr< retdec::fileformat::DotnetClass >> &dotnetClassList)
Definition: dotnet_info.cpp:386
std::string getImportedClassLibName(std::size_t position) const
Definition: dotnet_info.cpp:74
std::string typeRefHashMd5
Definition: dotnet_info.h:44
void setImportedClassList(const std::vector< std::shared_ptr< retdec::fileformat::DotnetClass >> &dotnetClassList)
Definition: dotnet_info.cpp:395
const std::string & getTypeRefhashCrc32() const
Definition: dotnet_info.cpp:110
std::string getGuidStreamSizeStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:218
bool hasImportedClassListRecords() const
Definition: dotnet_info.cpp:494
std::uint64_t metadataHeaderAddress
Definition: dotnet_info.h:33
bool hasBlobStream() const
Definition: dotnet_info.cpp:458
bool hasGuidStream() const
Definition: dotnet_info.cpp:467
void setMetadataStreamInfo(std::uint64_t offset, std::uint64_t size)
Definition: dotnet_info.cpp:314
std::string moduleVersionId
Definition: dotnet_info.h:39
StreamInfo stringStream
Definition: dotnet_info.h:35
std::string getStringStreamOffsetStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:168
const std::string & getRuntimeVersion() const
Definition: dotnet_info.cpp:25
bool used
Definition: dotnet_info.h:31
std::string getStringStreamSizeStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:178
const std::string & getTypeRefhashSha256() const
Definition: dotnet_info.cpp:128
DotnetInfo()
Definition: dotnet_info.cpp:16
std::vector< std::shared_ptr< retdec::fileformat::DotnetClass > > definedClassList
Definition: dotnet_info.h:41
void setTypeRefhashCrc32(const std::string &crc32)
Definition: dotnet_info.cpp:404
void setRuntimeVersion(std::uint64_t majorVersion, std::uint64_t minorVersion)
Definition: dotnet_info.cpp:293
void setStringStreamInfo(std::uint64_t offset, std::uint64_t size)
Definition: dotnet_info.cpp:325
StreamInfo userStringStream
Definition: dotnet_info.h:38
std::string typeRefHashCrc32
Definition: dotnet_info.h:43
StreamInfo guidStream
Definition: dotnet_info.h:37
std::string getMetadataStreamOffsetStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:148
std::string getUserStringStreamOffsetStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:228
std::string typeRefHashSha256
Definition: dotnet_info.h:45
const std::string & getModuleVersionId() const
Definition: dotnet_info.cpp:247
std::string runtimeVersion
Definition: dotnet_info.h:32
void setBlobStreamInfo(std::uint64_t offset, std::uint64_t size)
Definition: dotnet_info.cpp:336
bool getImportedClassIndex(std::size_t position, std::size_t &result) const
Definition: dotnet_info.cpp:95
void setTypeRefhashMd5(const std::string &md5)
Definition: dotnet_info.cpp:413
void setTypeLibId(const std::string &id)
Definition: dotnet_info.cpp:377
std::string getImportedClassNameSpace(std::size_t position) const
Definition: dotnet_info.cpp:84
std::string getMetadataStreamSizeStr(std::ios_base &(*format)(std::ios_base &)) const
Definition: dotnet_info.cpp:158
Class for .NET class.
Definition: archive_wrapper.h:19
Definition: dotnet_info.h:20
std::uint64_t size
Definition: dotnet_info.h:22
std::uint64_t offset
Definition: dotnet_info.h:21