Потоковый сканер байтовых (HEX) сигнатур для посекторного чтения USB. Подробнее...
#include <stddef.h>Классы | |
| struct | VirusSignature |
| Описание одной вирусной сигнатуры (последовательности байтов). Подробнее... | |
| struct | ScanState |
| Состояние потокового сканера. Хранит "хвост" предыдущего блока. Подробнее... | |
Макросы | |
| #define | SIG_MAX_LEN 32U |
| Максимальная длина одной сигнатуры в байтах. | |
Перечисления | |
| enum | Error_Codes_SI { SI_SUCCESS = 0 , SI_NULL_STATE_POINTER = 1 } |
| Коды ошибок scan_init(). Подробнее... | |
| enum | Error_Codes_SF { SF_SUCCESS = 0 , SF_NULL_STATE_POINTER = 1 , SF_NULL_BLOCK_POINTER = 2 , SF_NULL_SIGS_POINTER = 3 , SF_NULL_FLAG_POINTER = 4 , SF_NULL_MATCH_NAME_POINTER = 5 , SF_ZERO_SIGNATURE_LENGTH = 6 , SF_SIGNATURE_TOO_LONG = 7 } |
| Коды ошибок scan_feed(). Подробнее... | |
Функции | |
| int | scan_init (ScanState *state) |
| Инициализирует состояние сканера (сбрасывает хвост). | |
| int | scan_feed (ScanState *state, const unsigned char *block, unsigned int block_len, const VirusSignature *sigs, unsigned int sig_count, int *virus_flag, const char **match_name) |
| Скармливает сканеру один блок данных и ищет в нём сигнатуры. | |
Потоковый сканер байтовых (HEX) сигнатур для посекторного чтения USB.
Движок не зависит от платформы: компилируется и на ПК (gcc), и в Arduino. Данные подаются блоками (например, секторами по 512 байт) через scan_feed(). Сигнатуры, лежащие на границе двух блоков, ловятся за счёт "хвоста" (carry).
| #define SIG_MAX_LEN 32U |
Максимальная длина одной сигнатуры в байтах.
| enum Error_Codes_SF |
Коды ошибок scan_feed().
| Элементы перечислений | |
|---|---|
| SF_SUCCESS | |
| SF_NULL_STATE_POINTER | |
| SF_NULL_BLOCK_POINTER | |
| SF_NULL_SIGS_POINTER | |
| SF_NULL_FLAG_POINTER | |
| SF_NULL_MATCH_NAME_POINTER | |
| SF_ZERO_SIGNATURE_LENGTH | |
| SF_SIGNATURE_TOO_LONG | |
| enum Error_Codes_SI |
Коды ошибок scan_init().
| Элементы перечислений | |
|---|---|
| SI_SUCCESS | |
| SI_NULL_STATE_POINTER | |
| int scan_feed | ( | ScanState * | state, |
| const unsigned char * | block, | ||
| unsigned int | block_len, | ||
| const VirusSignature * | sigs, | ||
| unsigned int | sig_count, | ||
| int * | virus_flag, | ||
| const char ** | match_name ) |
Скармливает сканеру один блок данных и ищет в нём сигнатуры.
| state | Состояние сканера. Не должен быть NULL. |
| block | Блок данных (например, сектор 512 байт). Не должен быть NULL. |
| block_len | Длина блока в байтах. |
| sigs | Таблица сигнатур. Не должна быть NULL. |
| sig_count | Количество сигнатур в таблице. |
| virus_flag | Выход: 1 если найдена сигнатура, иначе 0. Не должен быть NULL. |
| match_name | Выход: имя найденной угрозы (или не трогается, если чисто). Не NULL. |
| int scan_init | ( | ScanState * | state | ) |
Инициализирует состояние сканера (сбрасывает хвост).
| state | Указатель на состояние. Не должен быть NULL. |