2012-11-08 10 views
18

Próbuję wyprowadzać wartości ASCII odpowiadające niektórym binarnym danym. Mam powodzeniem stosowane narzędzia hexdump do heksowego wyjściowego i ASCII side-by-side, jak poniżej:Używanie hexdump do wyprowadzania tylko ASCII

00000120 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 33 30 | = 0x00000030| 
00000130 0a 01 00 00 00 23 00 00 00 75 75 69 64 30 20 20 |.....#...uuid0 | 
00000140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d |    =| 
00000150 20 30 78 39 30 38 32 61 63 35 61 0a 01 00 00 00 | 0x9082ac5a.....| 
00000160 23 00 00 00 75 75 69 64 31 20 20 20 20 20 20 20 |#...uuid1  | 
00000170 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 37 34 |   = 0x74| 
00000180 61 37 34 37 36 66 0a 01 00 00 00 23 00 00 00 75 |a7476f.....#...u| 
00000190 75 69 64 32 20 20 20 20 20 20 20 20 20 20 20 20 |uid2   | 
000001a0 20 20 20 20 20 3d 20 30 78 61 32 35 35 35 63 30 |  = 0xa2555c0| 

Jednak chciałbym zobaczyć tylko ASCII jako wartości wyjściowych. Nie interesują mnie wartości szesnastkowe. Na przykład, wyjście powinno być następujące (ok odpowiadające wyżej.):

= 0x00000030.....#... 
uuid0=0x9082ac5a..... 
uuid1=0x74a7476f 

(. I nie były w stanie wykorzystać przełączniki hd do tego)

+0

w katalogu 'cat', istnieją pewne wartości nie-ASCII. Chcę się ich pozbyć i pomyślałem, że to jest sposób, aby przejść :( – recluze

+1

'struny' działa dokładnie.Jeśli to jest odpowiedź jako odpowiedź, mogę ją zaakceptować – recluze

Odpowiedz

28

Jeśli trzeba tylko zobaczyć zawartość tekstową pliku binarnego, strings powinny być użyteczne:

Dla każdego podanego pliku, GNU strings drukuje postać do druku sekwencje, które są co najmniej 4 znaków (lub liczba podana z opcją -n), po której następuje znak niedrukowalny. strings służy głównie do określania zawartości plików nietekstowych .

+0

Idealne.Dzięki . – recluze

+0

Lepsze dodanie' -n 'opcja, np.' łańcuchy -n 2 a.out | less -N', ponieważ domyślnie tylko ciąg znaków o długości> = 4 jest traktowany jako łańcuch przez 'ciągi ', stąd nagłówek' ELF' pliku binarnego elfa nie jest domyślnie: –

5

można użyć od :

od -t c file 

Or awk z hexdump tak:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}' 

Uwaga: musisz zmienić polecenie awk, jeśli zmienisz liczbę kolumn w hexdump.

8

Choć answer from raina77ow o poleceniu strings(1) jest poprawny sposób, aby uzyskać wynik rzeczywiście chciał, konkretne żądanie wykorzystać hexdump(1) odfiltrować tylko znaki druku może mieć sens w pewnych kontekstach. Odpowiem konkretnie tutaj.

Narzędzie hexdump okazuje się wspierać zaskakująco uogólniony mechanizm formatowania. Dokonano tego prawdopodobnie w celu ujednolicenia implementacji różnych możliwych do wybrania formatów. Jeśli twoja kopia heksdumpa ujawnia ten silnik (tak jak wiele) za pomocą opcji wiersza poleceń -e, możesz faktycznie zrobić to, o co prosiłeś.

Kluczem jest opcja -e i obsługiwany język formatowania. Ten język pozwala na specyfikację ciągów formatów, które zużywają bajty danych wejściowych i generują tekst. Polecenie takie jak:

$ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16 

pochłonie 16 bajtów na raz, wyświetli je za pośrednictwem formatu %_p i dodać do nowej linii po każdym 16 bajtów. Każdy znak niedrukowalny zostaje zastąpiony na wyjściu numerem ..

Inne rozważane znaki to: %_c i %_u. Pierwszy zastępuje znak niedrukowalny ich sekwencją eskadną ANSI-C lub trzycyfrową liczbą ósemkową. Drugi zastępuje nie drukowanie każdego znaku za pomocą konwencjonalnej nazwy znaku kontrolnego ASCII lub dwucyfrowej liczby szesnastkowej.

Jeśli kopia hexdump brakuje opcji -e, czy wolno, czy brakuje Ci implementację hexdump w ogóle, wówczas obficie licencją, szybko i rozsądnie przenośny realizację hexdump niedawno released by William Ahern warto przyjrzeć. Powinien on budować wiele uniksopodobnych systemów po wyjęciu z pudełka, a przy niewielkich modyfikacjach tworzy go z MingW GCC w systemie Windows. Kluczowym atrybutem tej implementacji jest to, że pojedynczy plik źródłowy może być zbudowany jako biblioteka współdzielona do włączenia do innego programu, jako moduł Lua do użytku z Lua, a także jako samodzielny plik wykonywalny implementujący komendę hexdump.

+0

Możesz zastąpić '' '' '' 'i unikać ucieczki, spójrz na: ' hexdump -e '16 "% _p" "\ n" " – Bacher

0
hexdump -C file /dev/sda4|cut -c 62-77 

Nadzieja pomaga

Powiązane problemy