Class to track data flow and detect a specific pattern
Diff: PatternFinder.cpp
- Revision:
- 1:038d0018a542
- Parent:
- 0:b8cca837d413
diff -r b8cca837d413 -r 038d0018a542 PatternFinder.cpp --- a/PatternFinder.cpp Mon Jan 11 04:48:08 2016 +0000 +++ b/PatternFinder.cpp Wed Jan 13 05:30:23 2016 +0000 @@ -1,39 +1,27 @@ #include "PatternFinder.h" -// make the linker aware of some possible types -template class PatternFinder<uint8_t>; -template class PatternFinder<int8_t>; -template class PatternFinder<uint16_t>; -template class PatternFinder<int16_t>; -template class PatternFinder<uint32_t>; -template class PatternFinder<int32_t>; -template class PatternFinder<uint64_t>; -template class PatternFinder<int64_t>; -template class PatternFinder<char>; -template class PatternFinder<wchar_t>; - -template <class T> -PatternFinder<T>::PatternFinder(T* Pattern,uint32_t PatternSize) +PatternFinder::PatternFinder(void* PatternData, uint32_t PatternLength, uint32_t PatternElementSize) { - m_PatternSize = PatternSize; - m_PatternReference = new T[PatternSize]; + m_PatternSize = PatternLength; + m_PatternElementSize = PatternElementSize; + m_RefPattern = new uint8_t[m_PatternSize*m_PatternElementSize]; - T *src = Pattern; - T *dst = &m_PatternReference[PatternSize-1]; + uint8_t *src = (uint8_t*)PatternData; + uint8_t *dst = (uint8_t*)m_RefPattern + (m_PatternSize-1)*m_PatternElementSize; //We must invert the given pattern so that it better fits the matching algorithm - for(int x = 0; x < PatternSize ;x++) + for(int x = 0; x < m_PatternSize ;x++) { - *dst-- = *src++; - + memcpy(dst,src,m_PatternElementSize); + dst-=m_PatternElementSize; + src+=m_PatternElementSize; } - m_CurrentPattern = new T[PatternSize]; + m_CurDataStream = new uint8_t[m_PatternSize*m_PatternElementSize]; return; } -template <class T> -PatternFinder<T>::~PatternFinder() +PatternFinder::~PatternFinder() { - delete [] m_PatternReference; - delete [] m_CurrentPattern; + delete [] m_RefPattern; + delete [] m_CurDataStream; return; }