Class to track data flow and detect a specific pattern
PatternFinder.cpp@0:b8cca837d413, 2016-01-11 (annotated)
- Committer:
- chris215
- Date:
- Mon Jan 11 04:48:08 2016 +0000
- Revision:
- 0:b8cca837d413
- Child:
- 1:038d0018a542
Class to find a pattern. Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
chris215 | 0:b8cca837d413 | 1 | #include "PatternFinder.h" |
chris215 | 0:b8cca837d413 | 2 | // make the linker aware of some possible types |
chris215 | 0:b8cca837d413 | 3 | template class PatternFinder<uint8_t>; |
chris215 | 0:b8cca837d413 | 4 | template class PatternFinder<int8_t>; |
chris215 | 0:b8cca837d413 | 5 | template class PatternFinder<uint16_t>; |
chris215 | 0:b8cca837d413 | 6 | template class PatternFinder<int16_t>; |
chris215 | 0:b8cca837d413 | 7 | template class PatternFinder<uint32_t>; |
chris215 | 0:b8cca837d413 | 8 | template class PatternFinder<int32_t>; |
chris215 | 0:b8cca837d413 | 9 | template class PatternFinder<uint64_t>; |
chris215 | 0:b8cca837d413 | 10 | template class PatternFinder<int64_t>; |
chris215 | 0:b8cca837d413 | 11 | template class PatternFinder<char>; |
chris215 | 0:b8cca837d413 | 12 | template class PatternFinder<wchar_t>; |
chris215 | 0:b8cca837d413 | 13 | |
chris215 | 0:b8cca837d413 | 14 | template <class T> |
chris215 | 0:b8cca837d413 | 15 | PatternFinder<T>::PatternFinder(T* Pattern,uint32_t PatternSize) |
chris215 | 0:b8cca837d413 | 16 | { |
chris215 | 0:b8cca837d413 | 17 | m_PatternSize = PatternSize; |
chris215 | 0:b8cca837d413 | 18 | m_PatternReference = new T[PatternSize]; |
chris215 | 0:b8cca837d413 | 19 | |
chris215 | 0:b8cca837d413 | 20 | T *src = Pattern; |
chris215 | 0:b8cca837d413 | 21 | T *dst = &m_PatternReference[PatternSize-1]; |
chris215 | 0:b8cca837d413 | 22 | //We must invert the given pattern so that it better fits the matching algorithm |
chris215 | 0:b8cca837d413 | 23 | for(int x = 0; x < PatternSize ;x++) |
chris215 | 0:b8cca837d413 | 24 | { |
chris215 | 0:b8cca837d413 | 25 | *dst-- = *src++; |
chris215 | 0:b8cca837d413 | 26 | |
chris215 | 0:b8cca837d413 | 27 | } |
chris215 | 0:b8cca837d413 | 28 | m_CurrentPattern = new T[PatternSize]; |
chris215 | 0:b8cca837d413 | 29 | return; |
chris215 | 0:b8cca837d413 | 30 | } |
chris215 | 0:b8cca837d413 | 31 | |
chris215 | 0:b8cca837d413 | 32 | template <class T> |
chris215 | 0:b8cca837d413 | 33 | PatternFinder<T>::~PatternFinder() |
chris215 | 0:b8cca837d413 | 34 | { |
chris215 | 0:b8cca837d413 | 35 | delete [] m_PatternReference; |
chris215 | 0:b8cca837d413 | 36 | delete [] m_CurrentPattern; |
chris215 | 0:b8cca837d413 | 37 | return; |
chris215 | 0:b8cca837d413 | 38 | } |
chris215 | 0:b8cca837d413 | 39 |