У меня есть кусок довольно случайных двоичных данных. Я хочу найти, где этот кусок находится в файле, сколько раз он встречается и по какому смещению байта (или сектора). Любые идеи о том, как это сделать?
Спасибо, Джастин
У меня есть кусок довольно случайных двоичных данных. Я хочу найти, где этот кусок находится в файле, сколько раз он встречается и по какому смещению байта (или сектора). Любые идеи о том, как это сделать?
Спасибо, Джастин
Я считаю, что ни одна из существующих команд не делает именно то, что вы хотите. Если ваш фрагмент небольшой и ваш файл помещается в памяти, его легко написать самостоятельно. Просто просмотрите содержимое файла, применяя strncmp в каждой позиции.
Если ваш файл очень большой, но все еще помещается в адресное пространство, вы можете сделать то же самое с помощью mmap.
Если ваш фрагмент не маленький, вам, вероятно, лучше использовать алгоритм Бойера-Мура вместо strncmp. Это все еще не слишком много работы, поскольку уже есть реализации, которые вы можете использовать.
Я бы порекомендовал для этого X-Ways WinHex. Я довольно часто использую его для поиска произвольных данных на жестких дисках или в больших файлах образов дисков.
Вы можете сделать это с помощью grep
Это выводит строки со смещением байта
grep --text --byte-offset 'ls' /bin/ls
Добавьте параметр --count, чтобы получить общее количество совпадений.