Polecenie Linuxa, aby znaleźć ciągi znaków w pliku binarnym lub innym niż ascii


39

Czy istnieje komenda linux do wyodrębnienia wszystkich ciągów ascii z pliku wykonywalnego lub innego pliku binarnego? Chyba mógłbym to zrobić grepem, ale pamiętam gdzieś, że takie polecenie istnieje?

Odpowiedzi:


72

Polecenie, którego szukasz, to strings

Jego nazwa jest dość oczywista, pobiera dowolny drukowalny ciąg z danego pliku.

man strings daje:

STRINGS (1)


Ciągi NAME - znajdź ciągi do wydrukowania w obiekcie lub innym pliku binarnym

STRESZCZENIE
strings [ - ] [ -a ] [ -o ] [ -t format ] [ -number ] [ -n number ] [--] [file ...]


10

Polecenie strings jest sposobem na rozwiązanie tego rodzaju problemów. Czasami musisz także wyrzucić go z grep .

Na przykład:

strings somebinaryfile | grep textuwanttofind


3

Polecenie od może to zrobić:

od -c *filename*

3
tak, to wyodrębnia znaki ASCII, ale tak naprawdę nie są to same łańcuchy. Myślę, że „ciągi” są bardziej przydatne w większości przypadków.
user5336,

Tak, nie wiedziałem o tym poleceniu, ale teraz wiem! AlberT dostał mój „+1” :-)
Kyle Brandt,

2

Problem z używaniem łańcuchów polega na tym, że nie widzisz otaczających niedrukowalnych elementów i musisz być ostrożny z minimalną długością łańcucha.

Problem z używaniem

od -c PLIK
lub
hexdump -C PLIK
jest to, że sekwencja może być trudna do znalezienia, jeśli otacza linię.

Coś, co bardzo mi się podoba, to ZTreeWin działający w systemie WINE w systemie Linux - możesz z tym wiele zrobić, ale wyszukiwanie w dowolnym pliku lub edytowanie plików binarnych może być szczególnie przydatne.

Niesamowity pakiet ytree jest dostępny dla wielu wariantów Linuksa i Uniksa i ma dobry widok Hex zrzutu dowolnego pliku, ale nie ma wyszukiwania, które ma ZTreeWin (i jego 16-bitowy poprzednik, XTree).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.