Ребята подскажите может кто сталкивался.
Нужна софтина которая в себе имеет примерный функционал.Может на просторах интернета лежит готовое решение, но что-то найти не получается, а все хекс редакторы которые нашел могут только различия показывать! А в ручную производить сравнение это очень долго!
Задача такая.
Имеется два файла разного размера до подлинно известно что в них имеется одинаковая информация(например последовательность нескольких байт) так вот нужно чтобы софтина показала где есть одинаковые байты и сколько раз оно повторялось в каждом файле.
логику работы программы вижу таким образом.
берется произвольное число байт(например 4 байта) со второго файла и ищется совпадение с первым файлом при неудачном поиске делает сдвиг на один байт после того как сдвиги закончились и двигаться некуда берется значение со здвигом во втором файле и ищется сравнение в первом файле так же со сдвигами. а найденые комбинации байт заносятся в таблицу и сколько повторений.
вообщем как-то так!
Этот топик читают: Гость
Ответов: 197
Рейтинг: 2
|
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Вероятно, так оно может работать, но ты же понимаешь что тогда на каждый байт одного файла нужно перебрать все байты другого файла. То-есть, когда есть 2 файла по 1 МБ (1048576 байт), то читая 4 байта из 1-го файла и сдвигая на 1 байт, 2-й файл нужно прочитать 1048576 раз. Это объем данных ((1048576 - 3) * 1048576) = 1099508482048 байт, или
Можешь попробовать реализовать это в HiAsm с помощью DataToFileEx и 2-х MemoryStream. Редактировалось 4 раз(а), последний 2020-03-02 14:32:52 |
|||
карма: 26 |
|
Ответов: 197
Рейтинг: 2
|
|||
Я предпологаю что данная операция будет занимать много времени, но польза в данном случае важнее.
Netspirit писал(а):
Можешь поробовать реализовать это в HiAsm с помощью DataToFileEx и 2-х MemoryStream. Я к сожалению никак не пойму как работать с байтами в HiAsm. И примеры рассматривал и видосы смотрел, не догоняю. Никак не пойму суть или логику и принцип работы! В справке к сожалению для меня недостаточно информации для понимания. |
|||
карма: 0 |
|
Ответов: 1343
Рейтинг: 31
|
|||
это помоему очень жестоко, длинная будет любая у байт, которые нужно искать во втором файле? или даже 2 байта можно?, есть ли минимум и максимум или же всётаки все надо лопатить ?
нагружать можно весь процессор, 1 длинна байт на 1 поток, и так в несколько потоков, дабы на 100% загрузить процессор Редактировалось 5 раз(а), последний 2020-02-26 14:55:15 |
|||
карма: 2 |
|
Ответов: 197
Рейтинг: 2
|
|||
поробую обьяснить еще раз.
Например первый файл у нас размером 1мб. в нем нужно найти последоватьльность байт взятых со второго файла размером 128кб. первый цикл. например выставляем значение 5 байт. программа берет первыые 5 байт со второго файла и ищет последовательность этих байт в первом файле. например результат поиска ничего не дал. Берет следующие 5 байт во втором файле и также ищет совпадениес первым файлом начиная с первого байта. опять ничего поиск не дал. потом снова берет следующие 5 байт со втрого файла и снова ищет совпадение с первым файлом. например в течении первого цикла результата не дало делаем второй цикл второй цикл программа берет 5 байт со второго файла и ищет последовательность этих байт в первом файле но только теперь со сдвигом в 1 байт(тоесть берет 5 байт начиная со второго байта) например поиск ничего не дал Берет следующие 5 байт во втором файле и также ищет совпадениес первым файлом начиная с первого байта. опять ничего поиск не дал. потом снова берет следующие 5 байт со втрого файла и снова ищет совпадение с первым файлом. и так делается пока все байты второго файла будут полностью проверены. например в течении второго цикла результата не дало делаем третий цикл третий цикл программа берет 5 байт со второго файла и ищет последовательность этих байт в первом файле но только теперь со сдвигом в 1 байт(тоесть берет 5 байт начиная с третьего байта Берет следующие 5 байт во втором файле и также ищет совпадениес первым файлом начиная с первого байта. опять ничего поиск не дал. потом снова берет следующие 5 байт со втрого файла и снова ищет совпадение с первым файлом. и так делается пока все байты второго файла будут полностью проверены. найденые последовательности вывести в таблицу которая в себе содержит адрес и последовательность байт желательно Каждая таблица для своего файла. итак делается пока все байты второго файла будут полностью проверены. искомые пять байт могут быть произвольно настраиваемые то есть могут быть и четыре байта и два байта и семь байт вообщем любое количество байт. --- Добавлено в 2020-02-26 16:44:35 Rysik писал(а): нагружать можно весь процессор, 1 длинна байт на 1 поток, и так в несколько потоков, дабы на 100% загрузить процессорзагрузка на проц думаю не принципиално. чаще всего будет случаться поиск и нахождение без сдвига но если вдруг не нашлось то сдвиг нужен. Редактировалось 2 раз(а), последний 2020-02-26 16:48:36 |
|||
карма: 0 |
|
Ответов: 1343
Рейтинг: 31
|
|||
нууу, что то типо того, делает сравнение 4-х байт довольно быстро
Редактировалось 2 раз(а), последний 2020-02-26 23:48:47 |
|||
карма: 2 |
| ||
Голосовали: | zhorik5 |
Ответов: 197
Рейтинг: 2
|
|||
опираясь на схему выше я нарисовал свою версию!
отсюда вопрос как сделать чтобы она в реальном времени показывала ход процесса? и как ускорить процесс? потому что если работать с мегабайтными файлами требуется действительно приличное время ожидания! если решите попробовать то подсовывайте файлы для начала не больше 10кб. иначе вы на долго ее повесите! мне кажется что-то в моей схеме не правильно! Редактировалось 2 раз(а), последний 2020-02-29 00:43:46 |
|||
карма: 0 |
|
Ответов: 1343
Рейтинг: 31
|
|||
думаю работает теперь точно правильно), но вот по поводу прогресс бара.... разве что какую то индикацию работы можно сделать и не больше, потому как позиций может оказаться не известно сколько.., надо же всётаки найти все позиции а не первую попавшуюся
но может быть надо вообще сравнение байт по 1 позиции, скажем берём первые 2 байта с первого и второго файла, сравниваем, а далее берём вторые 2 байта из обеих файлов.....
|
|||
карма: 2 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Netspirit писал(а): 1099508482048 байт, или 1 ГбайтО как..... |
|||
карма: 9 |
|
Ответов: 197
Рейтинг: 2
|
|||
Rysik писал(а): скажем берём первые 2 байта с первого и второго файла, сравниваем, а далее берём вторые 2 байта из обеих файлов.....это не годится на случай если один файл меньше другого --- Добавлено в 2020-02-29 09:27:14 Galkov писал(а): 1099508482048чтото мне кажется это ближе к теробайтам))) Интересный стресс тест получается. Редактировалось 1 раз(а), последний 2020-02-29 09:27:14 |
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
zhorik5 писал(а): это не годится на случай если один файл меньше другогоНе факт! Редактировалось 1 раз(а), последний 2020-02-29 12:34:52 |
|||
карма: 6 |
|
Разработчик
Ответов: 26149
Рейтинг: 2127
|
|||
zhorik5 писал(а): чтото мне кажется это ближе к теробайтамДействительно, 1 Тб, но тоже не мало. Редактировалось 4 раз(а), последний 2020-03-02 18:02:50 |
|||
карма: 22 |
|
Ответов: 197
Рейтинг: 2
|
|||
flint2 писал(а): Не факт! да ну как? побайтовое сравнение начиная спервого в обоих файлах 1мб и 128кб пройдет до конца 128кб и сравнение закончится. nesco писал(а): Бери выше -- это 1.099 петабайт.получается из этих соображений и нет такого готового софта, либо ресурсов на обработку такого количества данных за вменяемый промежуток времени. в моем случает это обычно один файл до 4мб другой до 512кб в основном это 1мб и 128кб либо того меньше. есть как бы мощный проц который можно было бы озадачить на выполнение этой операции. пусть даже бы за час решал эту задачу с небольшими файлами. Главное решал!
https://cloud.mail.ru/public/5mSG/3NxdwmECD файлы для оперирования Я тут подумал а что если файлы делить на 4 части и одновременно запускать 4 потока это явно бы прибавило скорости! Как это сделать? --- Добавлено в 2020-02-29 13:13:05 хочется чтото универсальное. с помощью которого можно будет даже пароль на роутер подобрать имея словарь пароллей например переведенный в хекс и атаку по дампу роутера!!! возможно идея бред но мне кажется приминение нашлось бы. Редактировалось 6 раз(а), последний 2020-03-24 15:10:38 |
|||
карма: 0 |
|
Ответов: 1343
Рейтинг: 31
|
|||
zhorik5 писал(а): да ну как? побайтовое сравнение начиная спервого в обоих файлах 1мб и 128кб пройдет до конца 128кб и сравнение закончится.Мой последний пример работает на перебор всего второго файла и не важно какой размер у него, хоть 10КБ хоть 10МБ. Так же не важно какой обьем у первого файла. |
|||
карма: 2 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Тут может быть два подхода:
Например, если найти все совпадающие слова принадлежащие двум разным словарям разного размера, то это задачка из учебника. Т.е. зная каким образом дискретизируется информация, пусть даже переменной длины, то она решается, как два пальца об асфальт. А вот если признаки деления не известны, то потребуется очень большое множество переборов, чтобы найти все наибольшие совпадающие цепочки. Задача тоже решаема, но если именно такой подход в решении общей задачи, то «неладно что-то в Датском государстве». |
|||
карма: 6 |
|