Скажем, у меня есть блочное устройство или файл изображения. И скажем, у меня также есть последовательность байтов или строка или какой-то шаблон поиска. Как я могу получить позиции вхождений такого шаблона или строки? Есть ли инструменты для этого?
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 Однобайтовое отображение символов. Отобразите смещение ввода в шестнадцатеричном формате, за которым следуют шестнадцать разделенных пробелами трехстрочных символов, заполненных пробелами, входных данных на строку.