当一个人读取文件时,我们说一个dd图像,或者我们用cat / dev / sda从硬盘驱动器中读取,输出通常是某种形式的Hex。由于这些实际上是二进制文件,因此有一种方法可以查看二进制文件而不是十六进制文件。
添加:所以这是hdd的Windows 7 dd图像的输出。你可以看到它只是六角形糊状物。我反而希望看到实际的二进制文件,而不是十六进制的解释。
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^
答案 0 :(得分:5)
尝试: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 :(得分:1)
HDD上的大多数数据都是二进制数据并不意味着来表示可打印的字符,所以如果使用cat
(一个用于输出文本的命令,而不是二进制数据),你就会变得毫无意义”
cat
将转储二进制文件,但只能假设字节是可打印的字符。在您提供的示例中,字节不是编码文本,您看到的字符没有多大意义。
如果您需要以十六进制格式化的输出,请使用hd
作为Dennis建议。
我相信可以说服od
命令输出二进制为1和0。
更正:我想,od
命令是hd
的前身。它不做二进制输出(即1s和0s)。 hd
也没有。
以1和0的形式输出会更有意义吗?我怀疑它,它需要太多的屏幕空间。十六进制和八进制足够接近二进制。
答案 2 :(得分:1)
如果确实想要数据的二进制表示,您可以这样做:
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
如果那不是您想要的,请更具体地了解您的期望。
答案 3 :(得分:0)
cat
应该转储二进制文件。如果您真的看到可打印的十六进制,那么可以使用xxd -r
来查找正在发生的事情。
答案 4 :(得分:0)
您需要一个相当宽的终端,但您可以执行以下操作:
#!/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
答案 5 :(得分:0)
我使用名为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#....|