Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.12.172] |
|
Сообщ.
#1
,
|
|
|
Есть задача: даны два двоичных файла. Например (1,2,3,4,5,6,7,8,9) и (9,8,7,6,5,3,4,2,1).
Хочется найти наибольший общий блок(последовательность). В этом примере - (3,4). Скажите, есть такая программа (адрес начала и длина) или проще написать самому? |
Сообщ.
#2
,
|
|
|
Есть такой алгоритм в дискретном анализе - поиск наибольшей общей последовательности.
|
Сообщ.
#3
,
|
|
|
Цитата deil @ Хорошо. А есть готовые решения (для файлов)? Или всё же придётся самому написать? ;-) Есть такой алгоритм в дискретном анализе - поиск наибольшей общей последовательности. |
Сообщ.
#5
,
|
|
|
Цитата MBo @ Спасибки! Будем исследовать. diff выводит различия. Возможно, общие места тоже умеет |
Сообщ.
#6
,
|
|
|
diff -U-1 file1 file2
Добавлено Но diff работает с текстовыми файлами |
Сообщ.
#7
,
|
|
|
Ага. Не то. Не работает, как хотелось.
|
Сообщ.
#8
,
|
|
|
Автор, ну алгоритм же реально простой. Вечерок почитать-осознать, другой вечерок - реализовать. Зачем тратить время на поиск того, что не нужно и априори на порядок сложнее?
|
Сообщ.
#9
,
|
|
|
Увы, но других, более важных дел, на два вечера полно...
|
Сообщ.
#10
,
|
|
|
Я писал программу для поиска общих бинарных последовательностей в файлах.
Дано на вход множество бинарных файлов (что внутри не важно), прога ищет общие последовательности байт в этих файлах размером от 4 до бесконечности. При этом смещение сигнатуры не имеет значение. Т.к. допустим в одном файле байты лежат в начале файла, во втором в середине, а в третем в конце. Прога их всех найдет. |
Сообщ.
#11
,
|
|
|
Цитата HardRock @ Вы ж чувствуете, что за этим следовать должно моё: а поделитесь оной программой, а!? ;-) Я писал программу для поиска общих бинарных последовательностей в файлах. |
Сообщ.
#12
,
|
|
|
Цитата Славян @ Есть задача: даны два двоичных файла. Например (1,2,3,4,5,6,7,8,9) и (9,8,7,6,5,3,4,2,1). Хочется найти наибольший общий блок(последовательность). В этом примере - (3,4). Если не секрет, какой практический смысл в этой задаче? |
Сообщ.
#13
,
|
|
|
Цитата Славян @ Поделиться исходным кодом к сожалению не могу, но направление движения озвучу: "Анализ хэшей, полученных сдвигом на 1 байт по индексируемому буфферу (т.е. по файлу)" Хэширование вполне подойдет CRC32. Добавлено Цитата TRoman @ Цитата Славян @ Есть задача: даны два двоичных файла. Например (1,2,3,4,5,6,7,8,9) и (9,8,7,6,5,3,4,2,1). Хочется найти наибольший общий блок(последовательность). В этом примере - (3,4). Если не секрет, какой практический смысл в этой задаче? В антивирусной индустрии эта задача стоит очень остро - нахождение сигнатуры, которая покрывала бы целые семейства малвары. Собственно поэтому исходником и не поделюсь, не смотря на то что прога была написана "дома", и я там уже на работаю, но прога до сих пор используется в одной всем известной антивирусной компании. Как пример "для чего это нужно" - по сигнатуре найденной этой прогой удалось задетектить большое семейство пакованой малвары в котором в файлах ни одного похожего байта, но прога нашла последовательность из 8 байт (видимо ключ пакера) по ней и задетектили =) Кроме этой 8 байтовой сигнатуры в файлах больше не было общих блоков. Файлы не эмулировались. |