różnica hexdump vs xxd

8

Szukałem, jak zrobić odwrotny zrzut heksowy i znalazłem xxd wspomniane. Jednak wydaje się, że nie działa po prostu:

xxd -r hexdumpfile > binaryfile

Następnie porównałem różnicę między wyjściami xxd infilei hexdump infilei znalazłem trzy różnice:

  1. Wyjście xxd ma dwukropek po adresie
  2. Dane wyjściowe xxd mają odwrócone pozycje w danych (na przykład 5a42dane wyjściowe hexdump stają się danymi wyjściowymi 425axxd)
  3. Po każdej linii jest kilka dodatkowych znaków

Mam tylko zrzuconą wersję niektórych plików na serwerze. Jak mogę poprawnie odzyskać dane binarne za pomocą xxd?

tanon
źródło
Szukałem opcji w xxd do pobrania w formacie hexdump, ale na razie udało się to zrobić za pomocą prostych operacji sed
tanon
Tak naprawdę nie przetestowałem dokładnie tego, o co prosisz, ale spróbuj xxd -p i -b, -p jest zwykły -b jest binarny, podobnie jak twój -r. Jeśli chodzi o kolejność bajtów, dotyczy to dużych i małych endianów, a może xxd nie może tego odwrócić ... ale jest to związane z tym, jak bajty są przechowywane w pliku. Na przykład, jeśli masz plik tekstowy w notatniku , możesz zapisać go jako 16-bitowy duży endian w standardzie Unicode, mały endian lub UTF-8 lub cokolwiek innego, i widzisz różnicę w stosunku do xxd. Polecenie od może wyświetlać to inaczej.
barlop
Do wykorzystania w przyszłości, hexdumppozwala wybrać endianness zastosowany w jego danych wyjściowych, co może uprościć to. (Dlaczego teraz?
Uznałeś, że

Odpowiedzi:

6

Nie znam jednego polecenia, które wykonałoby konwersję, ale można je łatwo podzielić na kilka kroków:

  1. Usuń adresy z hexdumpdanych wyjściowych za pomocąsed
  2. Konwertuj na binarny za pomocą xxd
  3. Konwersja Endian (na przykład 5a42staje się 425a) przy użyciudd

Oto pełne polecenie:

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile
Tim
źródło
0

Możesz dokonać konwersji jednym sedpoleceniem. Wystarczy dodać :adres po i zmienić endianness (przejście ab12na 12ab).

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g' dump | xxd -r
Socowi
źródło