Поиск бинарного фрагмента в файле

У меня есть кусок довольно случайных двоичных данных. Я хочу найти, где этот кусок находится в файле, сколько раз он встречается и по какому смещению байта (или сектора). Любые идеи о том, как это сделать?

Спасибо, Джастин


person Justin    schedule 12.05.2009    source источник
comment
извините, не заметил тег linux до сих пор.   -  person Jonas Engström    schedule 13.05.2009


Ответы (3)


Я считаю, что ни одна из существующих команд не делает именно то, что вы хотите. Если ваш фрагмент небольшой и ваш файл помещается в памяти, его легко написать самостоятельно. Просто просмотрите содержимое файла, применяя strncmp в каждой позиции.

Если ваш файл очень большой, но все еще помещается в адресное пространство, вы можете сделать то же самое с помощью mmap.

Если ваш фрагмент не маленький, вам, вероятно, лучше использовать алгоритм Бойера-Мура вместо strncmp. Это все еще не слишком много работы, поскольку уже есть реализации, которые вы можете использовать.

person Nathan Kitchen    schedule 12.05.2009
comment
Вот что я в итоге сделал с mmap и memcmp. Это работает, но я подумал, что действительно должна быть команда, которая уже делает это. - person Justin; 13.05.2009

Я бы порекомендовал для этого X-Ways WinHex. Я довольно часто использую его для поиска произвольных данных на жестких дисках или в больших файлах образов дисков.

person Jonas Engström    schedule 12.05.2009

Вы можете сделать это с помощью grep

Это выводит строки со смещением байта

grep --text --byte-offset 'ls' /bin/ls

Добавьте параметр --count, чтобы получить общее количество совпадений.

person Paul Lindner    schedule 12.05.2009
comment
Я тоже так делал, но дело в том, что у меня есть файл, содержащий чанк. Я не могу найти способ заставить grep искать содержимое одного файла в другом файле. - person Justin; 13.05.2009