На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! В разделе обсуждаются следующие темы:
1) Процесс разработки программного обеспечения.
2) Определение требований к программному обеспечению.
3) Составные части и процесс проектирования (см. Шаблоны проектирования).
4) Документирование программного продукта(проекта).
5) Руководство разработкой программного обеспечения.
6) Проектирование пользовательского интерфейса.
7) Контроль версий проекта (см. Управление версиями в Subversion, Стратегии использования svn).
Модераторы: ElcnU
  
> Найти общий двоичный блок
    Есть задача: даны два двоичных файла. Например (1,2,3,4,5,6,7,8,9) и (9,8,7,6,5,3,4,2,1).
    Хочется найти наибольший общий блок(последовательность). В этом примере - (3,4).
    Скажите, есть такая программа (адрес начала и длина) или проще написать самому?
      Есть такой алгоритм в дискретном анализе - поиск наибольшей общей последовательности.
      Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.
      Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...
        Цитата deil @
        Есть такой алгоритм в дискретном анализе - поиск наибольшей общей последовательности.
        Хорошо. А есть готовые решения (для файлов)? Или всё же придётся самому написать? ;-)
          diff выводит различия. Возможно, общие места тоже умеет
            Цитата MBo @
            diff выводит различия. Возможно, общие места тоже умеет
            Спасибки! Будем исследовать.
              diff -U-1 file1 file2

              Добавлено
              Но diff работает с текстовыми файлами
              Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                Ага. Не то. Не работает, как хотелось.
                  Автор, ну алгоритм же реально простой. Вечерок почитать-осознать, другой вечерок - реализовать. Зачем тратить время на поиск того, что не нужно и априори на порядок сложнее? :)
                  Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.
                  Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...
                    Увы, но других, более важных дел, на два вечера полно...
                      Я писал программу для поиска общих бинарных последовательностей в файлах.

                      Дано на вход множество бинарных файлов (что внутри не важно), прога ищет общие последовательности байт в этих файлах размером от 4 до бесконечности. При этом смещение сигнатуры не имеет значение. Т.к. допустим в одном файле байты лежат в начале файла, во втором в середине, а в третем в конце. Прога их всех найдет.
                      Сообщение отредактировано: HardRock -
                      Трудные времена проходят, сильные люди остаются. Делай то, что считаешь правильным.
                        Цитата HardRock @
                        Я писал программу для поиска общих бинарных последовательностей в файлах.
                        Вы ж чувствуете, что за этим следовать должно моё: а поделитесь оной программой, а!? ;-)
                          Цитата Славян @
                          Есть задача: даны два двоичных файла. Например (1,2,3,4,5,6,7,8,9) и (9,8,7,6,5,3,4,2,1).
                          Хочется найти наибольший общий блок(последовательность). В этом примере - (3,4).

                          Если не секрет, какой практический смысл в этой задаче?
                            Цитата Славян @

                            Поделиться исходным кодом к сожалению не могу, но направление движения озвучу:

                            "Анализ хэшей, полученных сдвигом на 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 байтовой сигнатуры в файлах больше не было общих блоков. Файлы не эмулировались.
                            Сообщение отредактировано: HardRock -
                            Трудные времена проходят, сильные люди остаются. Делай то, что считаешь правильным.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script Execution time: 0,1093 ]   [ 17 queries used ]   [ Generated: 17.11.17, 23:01 GMT ]