retdec
symbol_pattern.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_PATTERNGEN_PATTERN_EXTRACTOR_TYPES_SYMBOL_PATTERN_H
8 #define RETDEC_PATTERNGEN_PATTERN_EXTRACTOR_TYPES_SYMBOL_PATTERN_H
9 
10 #include <ostream>
11 #include <string>
12 #include <vector>
13 
14 #include "yaramod/builder/yara_hex_string_builder.h"
15 
16 // Forward declarations.
17 namespace yaramod {
18  class YaraFileBuilder;
19 } // namespace yaramod
20 
21 namespace retdec {
22 namespace patterngen {
23 
24 using Meta = std::pair<std::string, std::string>;
25 
30 {
31  private:
35  struct Reference
36  {
37  std::string name;
38  std::size_t offset;
39  std::vector<std::uint8_t> mask;
40  };
41 
42  // Raw data.
43  bool isLittle;
44  std::size_t bitWidth;
45  std::vector<Reference> refs;
46  std::vector<std::uint8_t> data;
47 
48  // String metas.
49  std::string symbolName;
50  std::string ruleName;
51  std::vector<Meta> metas;
52 
55  std::string getReferenceString() const;
56  std::shared_ptr<yaramod::HexString> getHexPattern() const;
57  void createBytePattern(std::uint8_t mask, std::uint8_t byte,
58  yaramod::YaraHexStringBuilder &builder) const;
60 
61  public:
64  SymbolPattern(bool isLittleEndian, std::size_t wordBitWidth);
66 
69  void setName(const std::string &symbolName);
70  void setRuleName(const std::string &ruleName);
71  void setSourcePath(const std::string &filePath);
72  void setArchitectureName(const std::string &archName);
74 
77  void loadData(std::vector<unsigned char> &&symbolData);
78  void loadData(const std::vector<unsigned char> &symbolData);
79  void addReference(const std::string &refName, const std::size_t &offset,
80  const std::vector<std::uint8_t> &mask);
82 
85  void printYaraRule(std::ostream &outputStream,
86  const std::string &withNote = "") const;
87  void addRuleToBuilder(yaramod::YaraFileBuilder &yaraBuilder,
88  const std::string &withNote = "") const;
90 };
91 
92 } // namespace patterngen
93 } // namespace retdec
94 
95 #endif
Definition: symbol_pattern.h:30
void loadData(std::vector< unsigned char > &&symbolData)
Loading methods.
Definition: symbol_pattern.cpp:181
void setSourcePath(const std::string &filePath)
Definition: symbol_pattern.cpp:157
void setName(const std::string &symbolName)
Setters.
Definition: symbol_pattern.cpp:130
std::string getReferenceString() const
Data formatting methods.
Definition: symbol_pattern.cpp:28
std::vector< std::uint8_t > data
Symbol data.
Definition: symbol_pattern.h:46
std::size_t bitWidth
Word length.
Definition: symbol_pattern.h:44
std::vector< Meta > metas
Other optional metas.
Definition: symbol_pattern.h:51
std::string symbolName
Symbol name.
Definition: symbol_pattern.h:49
void createBytePattern(std::uint8_t mask, std::uint8_t byte, yaramod::YaraHexStringBuilder &builder) const
Definition: symbol_pattern.cpp:83
void setRuleName(const std::string &ruleName)
Definition: symbol_pattern.cpp:144
void addRuleToBuilder(yaramod::YaraFileBuilder &yaraBuilder, const std::string &withNote="") const
Definition: symbol_pattern.cpp:239
void printYaraRule(std::ostream &outputStream, const std::string &withNote="") const
Output methods.
Definition: symbol_pattern.cpp:219
std::string ruleName
Rule name.
Definition: symbol_pattern.h:50
bool isLittle
Endianness.
Definition: symbol_pattern.h:43
void addReference(const std::string &refName, const std::size_t &offset, const std::vector< std::uint8_t > &mask)
Definition: symbol_pattern.cpp:205
SymbolPattern(bool isLittleEndian, std::size_t wordBitWidth)
Constructors and destructor.
Definition: symbol_pattern.cpp:116
void setArchitectureName(const std::string &archName)
Definition: symbol_pattern.cpp:170
std::shared_ptr< yaramod::HexString > getHexPattern() const
Definition: symbol_pattern.cpp:55
std::vector< Reference > refs
References.
Definition: symbol_pattern.h:45
std::pair< std::string, std::string > Meta
Definition: symbol_pattern.h:24
bool isLittleEndian()
Finds out if the runtime architecture is little endian.
Definition: system.cpp:16
Definition: archive_wrapper.h:19
Definition: symbol_pattern.h:17
Definition: symbol_pattern.h:36
std::string name
Name of referenced symbol.
Definition: symbol_pattern.h:37
std::size_t offset
Offset to symbol data.
Definition: symbol_pattern.h:38
std::vector< std::uint8_t > mask
Relocation mask.
Definition: symbol_pattern.h:39