![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
supersonic |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.6.2006 Репутация: нет Всего: нет |
Приветсвую! Есть задачка найти последоватательность байтов с пропусками в байтовом массиве, например есть такая последовательность, тут ?? означает любой байт
?? ?? ?? ?? ?? 1E 06 8C C8 8E D8 ?? ?? ?? 8E C0 50 BE ?? ?? 33 FF FC B6 длинна последовательности произвольная, количество и длинна пропусков также произвольны. Может есть какие то библиотеки для решения подобных задач ? Регулярки не подходят в виду того что для одного байт-массива будет выполнятся несколько тысяч таких поисков и время работы приложения значительно увеличится. |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
библиотек, таких не знаю, тут не так сложно написать самому, регулярные выражения для этой задачи не нужны
исходя из задачи (как я ее понял) имеем три последовательности, которые идут в определенном порядке относительно друг друга 1) организуем поиск первой последовательности - тупой перебор до первого вхождения 2) перебор пока совпадают, иначе возврат к пункту 1 3) последовательность найдена - поиск следующей последовательности, переход к пункту 1 4) все последовательности найдены можно распараллелить поиск несколькими потоками, немного конечно будет сложнее -------------------- undefined |
|||
|
||||
supersonic |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.6.2006 Репутация: нет Всего: нет |
Общий принцип я примерно себе так и представлял, но условия вы немного не так поняли
>>>>исходя из задачи (как я ее понял) имеем три последовательности, которые идут в определенном порядке относительно друг друга Длинна последовательности произвольная, количество и длинна пропусков также произвольны т.е. она может быть и такой (как в моем примере в 1м посте) ?? ?? ?? ?? ?? 1E 06 8C C8 8E D8 ?? ?? ?? 8E C0 50 BE ?? ?? 33 FF FC B6 а может быть и такой AD 4A 7B ?? ?? ?? ?? ?? 1E 06 8C ?? C8 8E D8 ?? ?? ?? 8E C0 50 BE ?? ?? 33 FF FC ?? ?? B6 Это сообщение отредактировал(а) supersonic - 20.5.2013, 17:09 |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
а в чем принципиальная разница? искомые последовательности нам известны целиком или есть еще какие-то условия?
а, стоп, вроде врубился, т.е. совпадение может быть частичным? то что не отмечено вопросами нам неизвестно, правильно? -------------------- undefined |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 1 Всего: 55 |
Выбросьте из искомой последовательности знаки вопроса и замените их соответствующими отступами. Организуйте обычный поиск, но ищите не целую последовательность, а интервалы соответствующей длины с соответствующими отступами между ними.
Например:
Выбираем из массива первые 24 байта (0-23). Просто сравниваем 6-10, 14-17 и 20-23 байты. Если не сошлось — берем из массива 1-24 байты и сравниваем с теми же интервалами, добавляя смещение (7-11, 15-18, 21-24). По сути задача сводится к определению этих интервалов из входящего шаблона. В остальном можно использовать любой алгоритм поиска подмножества во множестве. Это сообщение отредактировал(а) Arantir - 20.5.2013, 20:17 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
если судить по дальнейши объяснениям, то неправильно вопрос задан. похоже вопрос должен звучать так:
где * - означает любое количество любых байтов. так? Это сообщение отредактировал(а) volatile - 21.5.2013, 00:15 |
||||
|
|||||
supersonic |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.6.2006 Репутация: нет Всего: нет |
Такс, может быть я немного не так пояснил - суть задачи заключается в поиске бинарных сигнатур внутри PE-файлов, сигнатуры могут быть т.н. разряженными, т.е. внутри сигнатуры может встретится любое количество "разрывов" произвольной длинны, тут "разрывы" - это любые байты, вот для примера одна сигнатура, взято с PeId
[BeRoEXEPacker v1.00 -> BeRo / Farbrausch] signature=60 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? BE ?? ?? ?? ?? B9 04 00 00 00 8B F9 81 FE ?? ?? ?? ?? 7F 10 AC 47 04 18 2C 02 73 F0 29 3E 03 F1 03 F9 EB E8 BA ?? ?? ?? ?? 8D B2 ep_only=1 т.е. это означает что PE файл начиная со своей точки входа имеет сначала 2 байта 60 68 потом 4 любых байта потом снова байт 68 потом снова 4 любых и снова после них 68 и так далее... ну и таких сигнатур более 7к, каждую последовательность нада проверить на более чем лям различных файлов. Это сообщение отредактировал(а) supersonic - 21.5.2013, 13:55 |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
supersonic, пока вы сами не решите что вам нужно, никто вам не поможет.
последний пост противоречит 2-му посту. |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
ТС а
?? ?? ?? ?? ?? 1E 06 8C C8 8E D8 ?? ?? ?? 8E C0 50 BE ?? ?? 33 FF FC B6 и 1E 06 8C C8 8E D8 ?? ?? ?? 8E C0 50 BE ?? ?? 33 FF FC B6 не одно и тоже ?? -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |