retdec
rich_header.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_TYPES_RICH_HEADER_RICH_HEADER_H
8 #define RETDEC_FILEFORMAT_TYPES_RICH_HEADER_RICH_HEADER_H
9 
10 #include <string>
11 #include <vector>
12 
14 
15 namespace retdec {
16 namespace fileformat {
17 
22 {
23  private:
24  using richHeaderIterator = std::vector<LinkerInfo>::const_iterator;
25  std::string signature;
26  unsigned long long offset = 0;
27  unsigned long long key = 0;
28  std::vector<LinkerInfo> header;
29  bool isOffsetValid = false;
30  bool isKeyValid = false;
31  bool isValidStructure = false;
32  bool isSuspicious = false;
33  std::vector<std::uint8_t> bytes;
34  public:
37  std::string getSignature() const;
38  std::size_t getSignatureLength() const;
39  bool getOffset(unsigned long long &richOffset) const;
40  bool getKey(unsigned long long &richKey) const;
41  std::size_t getNumberOfRecords() const;
42  const LinkerInfo* getRecord(std::size_t recordIndex) const;
43  const LinkerInfo* getLastRecord() const;
44  bool getValidStructure() const;
45  bool getSuspicious() const;
46  const std::vector<std::uint8_t>& getBytes() const;
48 
51  void setSignature(std::string richSignature);
52  void setOffset(unsigned long long richOffset);
53  void setKey(unsigned long long richKey);
54  void setValidStructure(bool richValidStructure);
55  void setSuspicious(bool richSuspicious);
56  void setBytes(const std::vector<std::uint8_t>& richHeaderBytes);
58 
61  richHeaderIterator begin() const;
62  richHeaderIterator end() const;
64 
67  void clear();
68  void invalidateOffset();
69  void invalidateKey();
70  void addRecord(LinkerInfo &record);
71  bool hasRecords() const;
72  void dump(std::string &dumpHeader) const;
74 };
75 
76 } // namespace fileformat
77 } // namespace retdec
78 
79 #endif
Definition: linker_info.h:19
Definition: rich_header.h:22
void setBytes(const std::vector< std::uint8_t > &richHeaderBytes)
Definition: rich_header.cpp:174
richHeaderIterator end() const
Definition: rich_header.cpp:192
const std::vector< std::uint8_t > & getBytes() const
Definition: rich_header.cpp:116
bool isSuspicious
true if content of header is suspicious
Definition: rich_header.h:32
void setValidStructure(bool richValidStructure)
Definition: rich_header.cpp:155
bool isOffsetValid
true if offset is valid
Definition: rich_header.h:29
std::vector< LinkerInfo >::const_iterator richHeaderIterator
Definition: rich_header.h:24
void setKey(unsigned long long richKey)
Definition: rich_header.cpp:144
void dump(std::string &dumpHeader) const
Definition: rich_header.cpp:258
bool getSuspicious() const
Definition: rich_header.cpp:107
void addRecord(LinkerInfo &record)
Definition: rich_header.cpp:240
std::vector< LinkerInfo > header
all records in header
Definition: rich_header.h:28
void invalidateKey()
Definition: rich_header.cpp:231
void invalidateOffset()
Definition: rich_header.cpp:219
bool hasRecords() const
Definition: rich_header.cpp:249
bool getOffset(unsigned long long &richOffset) const
Definition: rich_header.cpp:39
void setOffset(unsigned long long richOffset)
Definition: rich_header.cpp:134
std::vector< std::uint8_t > bytes
decrypted content of rich header
Definition: rich_header.h:33
std::string signature
header in string representation
Definition: rich_header.h:25
bool isKeyValid
true if key is valid
Definition: rich_header.h:30
bool isValidStructure
true if header has valid structure
Definition: rich_header.h:31
const LinkerInfo * getRecord(std::size_t recordIndex) const
Definition: rich_header.cpp:80
bool getKey(unsigned long long &richKey) const
Definition: rich_header.cpp:56
std::size_t getSignatureLength() const
Definition: rich_header.cpp:27
void clear()
Definition: rich_header.cpp:200
richHeaderIterator begin() const
Definition: rich_header.cpp:183
bool getValidStructure() const
Definition: rich_header.cpp:98
void setSignature(std::string richSignature)
Definition: rich_header.cpp:125
std::size_t getNumberOfRecords() const
Definition: rich_header.cpp:70
const LinkerInfo * getLastRecord() const
Definition: rich_header.cpp:89
unsigned long long key
key for decryption
Definition: rich_header.h:27
void setSuspicious(bool richSuspicious)
Definition: rich_header.cpp:165
unsigned long long offset
offset of rich header in file
Definition: rich_header.h:26
std::string getSignature() const
Definition: rich_header.cpp:18
Class for information about linker.
Definition: archive_wrapper.h:19