retdec
resource_table.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_TYPES_RESOURCE_TABLE_RESOURCE_TABLE_H
8 #define RETDEC_FILEFORMAT_TYPES_RESOURCE_TABLE_RESOURCE_TABLE_H
9 
10 #include <memory>
11 #include <utility>
12 #include <vector>
13 
16 
17 namespace retdec {
18 namespace fileformat {
19 
24 {
25  private:
26  using resourcesIterator = std::vector<std::unique_ptr<Resource>>::const_iterator;
27  std::vector<std::unique_ptr<Resource>> table;
28  std::vector<Resource *> resourceVersions;
29  std::vector<ResourceIconGroup *> iconGroups;
30  std::vector<ResourceIcon *> icons;
31  std::vector<std::pair<std::string, std::string>> languages;
32  std::vector<std::pair<std::string, std::string>> strings;
33  std::string iconHashCrc32;
34  std::string iconHashMd5;
35  std::string iconHashSha256;
36  std::string iconPerceptualAvgHash;
37 
38  std::string computePerceptualAvgHash(const ResourceIcon &icon) const;
39  bool parseVersionInfo(const std::vector<std::uint8_t> &bytes);
40  bool parseVersionInfoChild(const std::vector<std::uint8_t> &bytes, std::size_t &offset);
41  bool parseVarFileInfoChild(const std::vector<std::uint8_t> &bytes, std::size_t &offset);
42  bool parseStringFileInfoChild(const std::vector<std::uint8_t> &bytes, std::size_t &offset);
43  bool parseVarString(const std::vector<std::uint8_t> &bytes, std::size_t &offset);
44  public:
47  std::size_t getNumberOfResources() const;
48  std::size_t getNumberOfLanguages() const;
49  std::size_t getNumberOfStrings() const;
50  std::size_t getSizeInFile() const;
51  std::size_t getLoadedSize() const;
52  const Resource* getResource(std::size_t rIndex) const;
53  const std::pair<std::string, std::string>* getLanguage(std::size_t rIndex) const;
54  const std::pair<std::string, std::string>* getString(std::size_t rIndex) const;
55  const Resource* getResourceWithName(const std::string &rName) const;
56  const Resource* getResourceWithName(std::size_t rId) const;
57  const Resource* getResourceWithType(const std::string &rType) const;
58  const Resource* getResourceWithType(std::size_t rId) const;
59  const Resource* getResourceWithLanguage(const std::string &rLan) const;
60  const Resource* getResourceWithLanguage(std::size_t rId) const;
61  const std::string& getResourceIconhashCrc32() const;
62  const std::string& getResourceIconhashMd5() const;
63  const std::string& getResourceIconhashSha256() const;
64  const std::string& getResourceIconPerceptualAvgHash() const;
67 
70  resourcesIterator begin() const;
71  resourcesIterator end() const;
73 
76  void computeIconHashes();
78  void clear();
79  void addResource(std::unique_ptr<Resource>&& newResource);
80  void addResourceVersion(Resource *ver);
81  void addResourceIcon(ResourceIcon *icon);
84  bool hasResources() const;
85  bool hasResourceWithName(const std::string &rName) const;
86  bool hasResourceWithName(std::size_t rId) const;
87  bool hasResourceWithType(const std::string &rType) const;
88  bool hasResourceWithType(std::size_t rId) const;
89  bool hasResourceWithLanguage(const std::string &rLan) const;
90  bool hasResourceWithLanguage(std::size_t rId) const;
91  void dump(std::string &dumpTable) const;
93 };
94 
95 } // namespace fileformat
96 } // namespace retdec
97 
98 #endif
Definition: resource_icon_group.h:20
Definition: resource_icon.h:18
Definition: resource_table.h:24
bool hasResourceWithType(const std::string &rType) const
Definition: resource_table.cpp:838
std::string iconPerceptualAvgHash
icon perceptual hash AvgHash
Definition: resource_table.h:36
resourcesIterator begin() const
Definition: resource_table.cpp:375
bool hasResources() const
Definition: resource_table.cpp:808
const Resource * getResource(std::size_t rIndex) const
Definition: resource_table.cpp:179
void dump(std::string &dumpTable) const
Definition: resource_table.cpp:877
void linkResourceIconGroups()
Definition: resource_table.cpp:752
void clear()
Definition: resource_table.cpp:708
void addResource(std::unique_ptr< Resource > &&newResource)
Definition: resource_table.cpp:717
const std::string & getResourceIconhashSha256() const
Definition: resource_table.cpp:340
const ResourceIconGroup * getPriorResourceIconGroup() const
Definition: resource_table.cpp:358
bool hasResourceWithName(const std::string &rName) const
Definition: resource_table.cpp:818
std::string iconHashCrc32
iconhash CRC32
Definition: resource_table.h:33
void addResourceVersion(Resource *ver)
Definition: resource_table.cpp:726
std::vector< std::pair< std::string, std::string > > strings
version info strings
Definition: resource_table.h:32
const std::string & getResourceIconhashMd5() const
Definition: resource_table.cpp:331
void addResourceIcon(ResourceIcon *icon)
Definition: resource_table.cpp:735
std::vector< ResourceIconGroup * > iconGroups
icon groups
Definition: resource_table.h:29
std::string iconHashMd5
iconhash MD5
Definition: resource_table.h:34
const Resource * getResourceWithName(const std::string &rName) const
Definition: resource_table.cpp:209
std::vector< std::unique_ptr< Resource > >::const_iterator resourcesIterator
Definition: resource_table.h:26
const std::pair< std::string, std::string > * getLanguage(std::size_t rIndex) const
Definition: resource_table.cpp:189
const Resource * getResourceWithLanguage(const std::string &rLan) const
Definition: resource_table.cpp:285
bool parseVersionInfo(const std::vector< std::uint8_t > &bytes)
Definition: resource_table.cpp:441
void computeIconHashes()
Definition: resource_table.cpp:392
const std::pair< std::string, std::string > * getString(std::size_t rIndex) const
Definition: resource_table.cpp:199
void parseVersionInfoResources()
Definition: resource_table.cpp:422
std::string computePerceptualAvgHash(const ResourceIcon &icon) const
Definition: resource_table.cpp:78
bool parseStringFileInfoChild(const std::vector< std::uint8_t > &bytes, std::size_t &offset)
Definition: resource_table.cpp:618
bool parseVersionInfoChild(const std::vector< std::uint8_t > &bytes, std::size_t &offset)
Definition: resource_table.cpp:517
std::size_t getNumberOfStrings() const
Definition: resource_table.cpp:137
bool parseVarFileInfoChild(const std::vector< std::uint8_t > &bytes, std::size_t &offset)
Definition: resource_table.cpp:574
std::size_t getSizeInFile() const
Definition: resource_table.cpp:146
bool hasResourceWithLanguage(const std::string &rLan) const
Definition: resource_table.cpp:858
resourcesIterator end() const
Definition: resource_table.cpp:384
bool parseVarString(const std::vector< std::uint8_t > &bytes, std::size_t &offset)
Definition: resource_table.cpp:660
std::vector< Resource * > resourceVersions
version info resources
Definition: resource_table.h:28
const std::string & getResourceIconhashCrc32() const
Definition: resource_table.cpp:322
std::string iconHashSha256
iconhash SHA256
Definition: resource_table.h:35
void addResourceIconGroup(ResourceIconGroup *iGroup)
Definition: resource_table.cpp:744
std::size_t getLoadedSize() const
Definition: resource_table.cpp:162
const Resource * getResourceWithType(const std::string &rType) const
Definition: resource_table.cpp:247
const std::string & getResourceIconPerceptualAvgHash() const
Definition: resource_table.cpp:349
std::size_t getNumberOfResources() const
Definition: resource_table.cpp:119
std::vector< std::pair< std::string, std::string > > languages
supported languages, LCID and code page
Definition: resource_table.h:31
std::vector< ResourceIcon * > icons
icons
Definition: resource_table.h:30
std::size_t getNumberOfLanguages() const
Definition: resource_table.cpp:128
std::vector< std::unique_ptr< Resource > > table
stored resources
Definition: resource_table.h:27
Definition: resource.h:24
Class for one resource.
Definition: archive_wrapper.h:19
Class for one resource icon group.