Смотрите двоичный файл вместо шестнадцатеричного в двоичном файле в то время как в оболочке, как Bash - PullRequest
1 голос
/ 14 ноября 2009

Когда кто-то читает файл, скажем, изображение dd, или мы читаем с самого жесткого диска с помощью cat / dev / sda, результат обычно получается в некоторой форме Hex. Поскольку это на самом деле двоичные файлы, есть способ увидеть двоичный файл вместо шестнадцатеричного.

Добавить: Итак, вот вывод образа Windows 7 HDD. Как видите, это просто шестнадцатеричный кашу. Я вместо этого хотел бы видеть фактический двоичный файл вместо интерпретации в шестнадцатеричном виде.

3<C0><8E>м^@|<8E><C0><8E><U+063E>^@|<BF>^@^F<B9>^@^B<FC><F3><A4>Ph^\^F<CB><FB><B9>^D^@<BD><BE>^G<80>~^@^@|^K^O<85>^N^A<83><C5>^P<E2><F1><CD>^X�88>V^@U<C6>F^Q^E<C6>F^P^@<B4>A<BB><AA>U<CD>^S]r^O<81><FB>U<AA>u
<F7><C1>^A^@t^C<FE>F^Pf`<80>~^P^@t&fh^@^@^@^@f<FF>h^@^@h^@|h^A^@h^P^@<B4>B
<8A>V^@<8B><F4><CD>^S<9F><83><C4>^P<9E><EB>^T<B8>^A^B<BB>^@|<8A>V^@<8A>v^A<8A>N^B<8A>n^C<CD^Sfas^\<FE>N^Qu^L<80>~^@<80>^O<84><8A>^@<B2><80> <EB><84>U2<E4><8A>V^@<CD>^S]랁<FE>}U<AA>un<FF>v^@<E8><8D>^@u^W<FA><B0><D1><E6>d<E8><83>^@<B0><DF><E6>`<E8>|^@<B0><FF><E6>d<E8>u^@<FB><B8>^@
<BB><CD>^Zf#<C0>u;f<81><FB>TCPAu2<81><F9>^B^Ar,fh^G<BB>^@^@fh^@^B^@^@f^@^@^@fSfSfUfh^@^@^@^@fh^@|^@^@fah^@^@^G<CD>^ZZ2<F6><EA>^@|^@^@<CD>^X
<A0><B7>^G<EB>^H<A0><B6>^G<EB>^C<A0><B5>^G2<E4>^E^@^G<8B><F0><AC><^@t
<BB>^G^@<B4>^N<CD>^P<EB><F2><F4><EB><FD>+<C9><E4>d<EB>^@$^B<E0><F8>$^B<C3>Invalid
partition table^@Error loading
operating system^@Missing operating
system^@^@^@c{<9A>~<8B>^V<C8>V <80>
!^@^G<FE><FF><FF>^@^H^@^@^@<E8><A7>^H^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@U
<AA>-kM-dM-^JV^@`M-;M-*UM-4AM-M^Sr6M-^AM-{UM-*u0M-vM-A^At+a`j^@j^@M-^?v
M-^?v^Hj^@h^@|j^Aj^PM-4BM-^KM-tM-M^Saas^NOt^K2M-dM-^JV^@M-M^SM-kM-VaM-yM-CInvalid
partition table^@Error loading
operating system^@Missing operating
system^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@,Dcv^Wv^W^@^@M-^@^A^A^@^GM-~M-^?M-^??^@^@^@M-^OM-^AM-'^H^

Ответы [ 6 ]

5 голосов
/ 14 ноября 2009

Попробуйте: hd filename

Редактировать

Попробуйте:

xxd -b filename

Вот пример:

$ xxd -b /usr/bin/xxd
0000000: 01111111 01000101 01001100 01000110 00000001 00000001  .ELF..
0000006: 00000001 00000000 00000000 00000000 00000000 00000000  ......
000000c: 00000000 00000000 00000000 00000000 00000010 00000000  ......
0000012: 00000011 00000000 00000001 00000000 00000000 00000000  ......
0000018: 10110000 10001000 00000100 00001000 00110100 00000000  ....4.
000001e: 00000000 00000000 11100100 00110001 00000000 00000000  ...1..
0000024: 00000000 00000000 00000000 00000000 00110100 00000000  ....4.
000002a: 00100000 00000000 00001001 00000000 00101000 00000000   ...(.
0000030: 00011101 00000000 00011100 00000000 00000110 00000000  ......
0000036: 00000000 00000000 00110100 00000000 00000000 00000000  ..4...
1 голос
/ 14 ноября 2009

Если вы действительно хотите двоичное представление данных, вы можете сделать это следующим образом:

perl -ne 'printf "0x%04x %s\n", $o++, unpack("B*", substr($_, 0, 1, "")) while length;' datafile

Вывод будет выглядеть примерно так:

0x0000 00000001
0x0001 00000010
0x0002 00110011
0x0003 00110100
0x0004 00001010

Если это не то, что вы хотите, пожалуйста, будьте немного более конкретны в отношении того, что вы ожидаете.

1 голос
/ 14 ноября 2009

Большинство данных на жестком диске - это двоичные данные , которые не означают для представления печатных символов, поэтому, если вы используете cat (команда, предназначенная для вывода текста, а не двоичную информацию), вы получите бессмысленное «месиво». 1004 *

cat будет выводить двоичный файл, как сказал Xepoch, но только при условии, что байты являются печатными символами. В приведенном вами примере байты не кодируют текст, а символы, которые вы видите, не имеют особого смысла.

Если вам нужен форматированный вывод в шестнадцатеричном формате, используйте hd, как предложил Деннис.

Я считаю, что команду od можно убедить в выводе двоичного файла в виде 1 и 0.

Исправление: команда od является предшественником hd, я полагаю. Он не выполняет двоичный вывод (т. Е. 1 с и 0 с). Также не hd.

Будет ли вывод в виде единиц и нулей иметь больше смысла? Я сомневаюсь в этом, и это потребовало бы слишком много экранной недвижимости. Hex и Octal достаточно близки к двоичному.

0 голосов
/ 01 декабря 2009

Я использую инструмент под названием hexdump. Он производит красиво отформатированный шестнадцатеричный дамп.

cat /dev/random |  hexdump -C
00000000  ee ae 18 a7 7f e2 a6 db  eb 2b d5 4f ec 90 7d 61  |.........+.O..}a|
00000010  83 88 b0 2f 8f 06 f8 35  b5 88 0e ca e6 0a b6 71  |.../...5.......q|
00000020  4a ff bf ab 1e 13 49 33  e0 dc 78 23 98 ca 07 a6  |J.....I3..x#....|
0 голосов
/ 14 ноября 2009

Вам понадобится довольно широкий терминал, но вы можете сделать что-то вроде:

#!/bin/sh
od "$@" | sed -e s/0/000/g -e s/1/001/g -e s/2/010/g -e s/3/011/g -e s/4/100/g -e s/5/101/g -e s/6/110/g -e s/7/111/g
0 голосов
/ 14 ноября 2009

cat должен выводить двоичный файл. Если вы действительно видите печатный гекс, тогда xxd -r можно использовать, чтобы узнать, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...