Antonshka Опубликовано 14 октября, 2021 Поделиться Опубликовано 14 октября, 2021 Привет всем снова! Что если сканировать и сравнивать память не по одному байту за раз, а по 4, или даже по 8? Даст ли это прирост скорости обработки? Например, имеем сигнатуру вида - 50 89 ?? C8 E8 3D CB FD FF ?? 5D. Далее, пусть функция, которая формирует маску и патерн, также определит, есть ли в сигнатуре непрерывная последовательность из 8, или если не 8, то хотя бы из 4 байт (то есть последовательность в которой не встречается ??). Если нет такой последовательности, то пусть выполнится стандартная версия функции поиска сигнатуры, - побайтовая. Если же есть такая последовательность, то пусть извлечется и сохраниться это 4 или 8 байтовое значение. Например C8 E8 3D CB. А затем, пусть вторая версия функции поиска сигнатуры использует это 4 байтовое значение для сравнения. Пусть она считывает по 4 байта за раз, то есть число типа int, и сравнивает его. Если будет совпадение с ним, то пусть она занесет его адрес в например std::vector<int *>. Допустим нашлось 20 совпадений. Пусть далее цикл пройдется по этим 20 указателям, и сравнит уже их побайтово, по длине маски. Есть ли смысл пробовать реализовать такое, или нет? Чтобы зря не терять мне время. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 15 октября, 2021 Автор Поделиться Опубликовано 15 октября, 2021 Похоже так не получится. Поиск будет идти от начала EXE модуля, то есть от адреса который выравнен по 0 в конце, а искомое Int значение может не совпасть с этим выравниванием. Нужно либо самому указывать в сигнатуре место начала Int значения, которое попадет под выравнивание 0, либо просто не мается и сканировать побайтово. Ссылка на комментарий Поделиться на другие сайты Поделиться
Hack Опубликовано 15 октября, 2021 Поделиться Опубликовано 15 октября, 2021 "Что если сканировать и сравнивать память не по одному байту за раз, а по 4, или даже по 8? Даст ли это прирост скорости обработки?" Пробовал и стало ещё медленнее. Вот написал сканер (в MSVC не работает). https://github.com/gtvx/scanner-signatures/blob/master/scanner_signatures/scanner_signature_fast.c На выбор есть 5 функций для сканирование, какая будет использована - зависит от конфигурации процесса. primitive sse sse2 avx xmm avx ymm Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 19 октября, 2021 Поделиться Опубликовано 19 октября, 2021 В 15.10.2021 в 12:11, Hack сказал: На выбор есть 5 функций для сканирование, какая будет использована - зависит от конфигурации процесса. иии... % скорости какой на 100-500мб? Ссылка на комментарий Поделиться на другие сайты Поделиться
Hack Опубликовано 20 октября, 2021 Поделиться Опубликовано 20 октября, 2021 12 часов назад, gmz сказал: иии... % скорости какой на 100-500мб? Сканирование всей памяти primitive 1600ms sse 920ms sse2 920ms без ReadProcessMemory primitive 920ms sse 218ms sse2 218ms Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения