Сканирование файла изображения или диска на наличие рисунка и возврат его местоположения

Скажем, у меня есть блочное устройство или файл изображения. И скажем, у меня также есть последовательность байтов или строка или какой-то шаблон поиска. Как я могу получить позиции вхождений такого шаблона или строки? Есть ли инструменты для этого?

2 ответа

Простое решение будет использовать

grep -aob "string to find" /dev/blockdev
  • переключатель "a" обрабатывает файл как текст, поэтому он отображает вывод, переключатель "o" ограничивает вывод смещением и искомой строкой, поэтому вы не получаете двоичный мусор, а переключатель "b" сообщает ему чтобы напечатать смещение байта также.

На этот вопрос есть несколько ответов, в зависимости от того, что именно вы хотите найти.

Если вы хотите найти все строки символов в двоичном файле, то команда является строкой: из Руководства,

строки (1)

название

strings - печатать строки печатаемых символов в файлах.

.... Для каждого данного файла в строках GNU печатаются последовательности печатаемых символов длиной не менее 4 символов (или число, указанное в приведенных ниже параметрах), за которыми следует непечатаемый символ. По умолчанию он печатает только строки из инициализированных и загруженных разделов объектных файлов; для других типов файлов он печатает строки из всего файла.

Если вместо этого вы заинтересованы в поиске двоичного файла для двоичной строки, вы можете использовать bgrep (не в репозиториях, AFAIK):

bgrep - это утилита для поиска вхождений двоичных строк в двоичных файлах. Как следует из названия, его интерфейс и дизайн смоделированы по вездесущей команде "grep", используемой для поиска вхождений текстовых шаблонов в текстовых файлах.

В качестве альтернативы вы можете использовать следующую уловку:

cat YourFile | hexdump -C | grep YourPattern

Это использует hexdump: снова из Руководства,

шестнадцатеричный (1)

название

hexdump - ascii, десятичный, шестнадцатеричный, восьмеричный дамп

Я использую удобный -C формат:

-C канонический шестнадцатеричный +ASCII дисплей. Выведите смещение ввода в шестнадцатеричном формате, за которым следуют шестнадцать разделенных пробелами двух столбцов шестнадцатеричных байтов, за которыми следуют те же шестнадцать байтов в формате%_p, заключенные в символы ''|''.

в то время как некоторые люди предпочитают -c формат:

-c Однобайтовое отображение символов. Отобразите смещение ввода в шестнадцатеричном формате, за которым следуют шестнадцать разделенных пробелами трехстрочных символов, заполненных пробелами, входных данных на строку.

Другие вопросы по тегам