function  SearchSign

Наверх  Предыдущая  Последующая |

function SearchSign(ASign : string; ARel : integer; ALen : integer) : integer;

 

Основная функция анализатора. Производит поиск сигнатуры ASign начиная со смещения ARel в зоне длинной ALen.

 

ARel - смещение точки, с которой начинается поиск. Смещение отсчитывается с нуля, указание отрицательного смещения рассматривается как смещение от конца файла

 

ALen - длина. Указание нулевой длинны рассматривается как поиск от точки ARel до конца буфера

 

ASign - сигнатура. Сигнатура задается текстовой строкой, описывающей правила сигнатурного поиска. Сигнатура состоит из элементов, разделенных пробелами. Пробелы в начале и конце сигнатуры игнорируются.

 

Поддерживаются следующие типы элементов сигнатуры:

 

xx - байт должен быть равен xx, где xx - значение байта в шеснадцатеричном виде

Пример: "55 AA 45 21"

 

!xx- байт не равен xx, где xx - значение байта в шеснадцатеричном виде

Пример: "55 AA !45 21"

 

? - байт может иметь любое значение (по сути это пропуск байта при анализе). Указание данного элемента в начале и конце сигнатуры не имеет смысла, хотя не является ошибкой

Пример: "55 ? AA ? ? 45 21"

 

?nn - пропуск при анализе nn байт (по сути условие - nn байт имеют произвольное значение), где nn - количество пропускаемых байт в десятичном виде. Пример: 55 AA ?5 45 21 - данная сигнатура аналогична сигнатуре 55 AA ? ? ? ? ? 45 21

 

*xx - пропуск нескольких байт (от нуля до достижения границы анализируемой области) до обнаружения байта, равного xx.

 

~xx,yy - производит проверку условия <байт буфера> AND yy = xx. Данная операция позволяет сравнивать заданные биты в байте, а не весь байт целиком. Пробелы в данной конструкции (до и после запятой) недопустимы, т.к. пробел является разделителем элементов в сигнатуре

Пример: "55 ~0A,0F" - в данном случае расшифровка сигнатуры звучит как "первый байт равен 55, а младшая тетрада второго равна 0A"

 

См. также: LoadFileToBuffer, FreeBuffer, GetBufferSize