3

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

2 ответа2

3

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

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

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

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

строки (1)

название

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

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

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

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

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

cat YourFile | hexdump -C | grep YourPattern

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

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

название

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .