retdec
search.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_CPDETECT_SEARCH_H
8 #define RETDEC_CPDETECT_SEARCH_H
9 
12 
13 namespace retdec {
14 namespace cpdetect {
15 
19 class Search
20 {
21  public:
26  {
27  private:
29  std::string slash;
31  std::size_t bytesAfter;
32  public:
33  RelativeJump(std::string sSlash, std::size_t sBytesAfter);
34 
37  std::string getSlash() const;
38  std::size_t getSlashNibbleSize() const;
39  std::size_t getBytesAfter() const;
41  };
42  private:
45  std::string nibbles;
47  std::string plain;
49  std::vector<RelativeJump> jumps;
51  std::size_t averageSlashLen;
53  bool fileLoaded;
57 
60  bool haveSlashes() const;
61  std::size_t nibblesFromBytes(std::size_t nBytes) const;
62  std::size_t bytesFromNibbles(std::size_t nNibbles) const;
64  public:
66 
69  bool isFileLoaded() const;
70  bool isFileSupported() const;
72 
75  const std::string& getNibbles() const;
76  const std::string& getPlainString() const;
78 
82  std::size_t fileOffset,
83  std::size_t shift,
84  std::int64_t &moveSize) const;
86 
89  unsigned long long countImpNibbles(
90  const std::string &signPattern) const;
91  unsigned long long findUnslashedSignature(
92  const std::string &signPattern,
93  std::size_t startOffset,
94  std::size_t stopOffset) const;
95  unsigned long long findSlashedSignature(
96  const std::string &signPattern,
97  std::size_t startOffset,
98  std::size_t stopOffset) const;
99  unsigned long long exactComparison(
100  const std::string &signPattern,
101  std::size_t fileOffset,
102  std::size_t shift = 0) const;
103  bool countSimilarity(
104  const std::string &signPattern,
105  Similarity &sim,
106  std::size_t fileOffset,
107  std::size_t shift = 0) const;
108  bool areaSimilarity(
109  const std::string &signPattern,
110  Similarity &sim,
111  std::size_t startOffset,
112  std::size_t stopOffset) const;
114 
117  bool hasString(const std::string &str) const;
118  bool hasString(const std::string &str, std::size_t fileOffset) const;
119  bool hasString(
120  const std::string &str,
121  std::size_t startOffset,
122  std::size_t stopOffset) const;
123  bool hasStringInSection(
124  const std::string &str,
125  const retdec::fileformat::Section *section) const;
126  bool hasStringInSection(
127  const std::string &str,
128  std::size_t sectionIndex) const;
129  bool hasStringInSection(
130  const std::string &str,
131  const std::string &sectionName) const;
133 
136  bool createSignature(
137  std::string &pattern,
138  std::size_t fileOffset,
139  std::size_t size) const;
141 };
142 
143 } // namespace cpdetect
144 } // namespace retdec
145 
146 #endif
std::size_t getBytesAfter() const
Definition: search.cpp:113
RelativeJump(std::string sSlash, std::size_t sBytesAfter)
Definition: search.cpp:83
std::size_t bytesAfter
number of bytes after slash for read
Definition: search.h:31
std::string slash
representations of '/' in file
Definition: search.h:29
std::string getSlash() const
Definition: search.cpp:96
std::size_t getSlashNibbleSize() const
Definition: search.cpp:104
Definition: search.h:20
std::size_t averageSlashLen
average length of one slash representation
Definition: search.h:51
std::string nibbles
content of file in hexadecimal string representation
Definition: search.h:45
const RelativeJump * getRelativeJump(std::size_t fileOffset, std::size_t shift, std::int64_t &moveSize) const
Definition: search.cpp:193
bool isFileSupported() const
Definition: search.cpp:161
std::vector< RelativeJump > jumps
representation of supported relative jumps
Definition: search.h:49
bool isFileLoaded() const
Definition: search.cpp:152
unsigned long long countImpNibbles(const std::string &signPattern) const
Definition: search.cpp:252
bool areaSimilarity(const std::string &signPattern, Similarity &sim, std::size_t startOffset, std::size_t stopOffset) const
Definition: search.cpp:499
std::size_t bytesFromNibbles(std::size_t nNibbles) const
Definition: search.cpp:143
bool hasString(const std::string &str) const
Definition: search.cpp:552
bool countSimilarity(const std::string &signPattern, Similarity &sim, std::size_t fileOffset, std::size_t shift=0) const
Definition: search.cpp:423
std::size_t nibblesFromBytes(std::size_t nBytes) const
Definition: search.cpp:133
bool createSignature(std::string &pattern, std::size_t fileOffset, std::size_t size) const
Definition: search.cpp:635
bool fileLoaded
true if file was successfully loaded, false otherwise
Definition: search.h:53
unsigned long long findSlashedSignature(const std::string &signPattern, std::size_t startOffset, std::size_t stopOffset) const
Definition: search.cpp:320
const std::string & getPlainString() const
Definition: search.cpp:179
unsigned long long findUnslashedSignature(const std::string &signPattern, std::size_t startOffset, std::size_t stopOffset) const
Definition: search.cpp:280
bool haveSlashes() const
Definition: search.cpp:123
bool fileSupported
Definition: search.h:56
unsigned long long exactComparison(const std::string &signPattern, std::size_t fileOffset, std::size_t shift=0) const
Definition: search.cpp:359
bool hasStringInSection(const std::string &str, const retdec::fileformat::Section *section) const
Definition: search.cpp:591
Search(retdec::fileformat::FileFormat &fileParser)
Definition: search.cpp:46
std::string plain
content of file as plain string
Definition: search.h:47
const std::string & getNibbles() const
Definition: search.cpp:170
retdec::fileformat::FileFormat & parser
Definition: search.h:43
Definition: file_format.h:45
Definition: section.h:19
cpdetectl types and structures.
Definition of FileFormat class.
Definition: archive_wrapper.h:19
Definition: cptypes.h:246