Linux/Unix下想看文件的十六进制形式怎么看?(搞破解必备^_^)
用od,一切轻松解决。
示例文件:
%cat aa.txt
1234567890abc
先来个干净的命令:
%od aa.txt
0000000 031061 032063 033065 034067 030071 061141 005143
0000016
看不懂?这是八进制形式,od命令默认是八进制了,并且是按两个字节一起来取值的,高位在后字节—— 0_0,麻烦了,不明白没关系,到10进制的时候再说吧。
先看十六进制,这次应该看懂了,跟windows下的ultraedit32差不多:
%od -x aa.txt
0000000 3231 3433 3635 3837 3039 6261 0a63
0000016
默认也是两个字节一起,不过是按“数值”,也已经这两个字节所代表的int类型数值,所以请注意字节顺序变了。
大写的X,就是四字节在一起表示一个数,注意字节顺序是倒序:
%od -X aa.txt
0000000 34333231 38373635 62613039 00000a63
0000016
到这地方明白了吗?od不是打印的原始的十六进制形式,而是按某一个进制,打印出相应的数值。
要想看windows下的那种原始的十六进制,还是强制一个字节为单位吧:
%od -t x1 aa.txt
0000000 31 32 33 34 35 36 37 38 39 30 61 62 63 0a
0000016
这次能看到31-39按顺序排列了。注意最后多了一个0a,这代表换行符。
来看十进制,两个字节为单位:
%od –t d aa.txt
0000000 12849 13363 13877 14391 12345 25185 2659
0000016
一个字节为���位,经常接触ascii码的人对这些就比较熟悉了。
%od -t d1 aa.txt
0000000 49 50 51 52 53 54 55 56 57 48 97 98 99 10
0000016
来个32位的整数型数值:
%od -t d4 aa.txt
0000000 875770417 943142453 1650536505 2659
0000016
再回到八进制,以下三个命令分别显示单字节、双字节和四字节的值。
%od -t o1 aa.txt
0000000 061 062 063 064 065 066 067 070 071 060 141 142 143 012
0000016
%od -t o2 aa.txt
0000000 031061 032063 033065 034067 030071 061141 005143
0000016
%od -t o4 aa.txt
0000000 06414631061 07015633065 14230230071 00000005143
0000016
od还有两个比较常用的参数:
-j skip 跳过skip字节,后面可以跟的单位有:b(block,512字节),k,m。
-N length 最多显示length个字节.
实际上,FreeBSD还提供了另外一个命令,可以简易地查看原始的十六进制形式:
%cat aa.txt | file2c -x
0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x61,0x62,0x63,0x0a
每行只显示8个:
%cat aa.txt | file2c -xn 8
0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,
0x39,0x30,0x61,0x62,0x63,0x0a
该贴被wulcan编辑于2014-8-27 9:53:46
该贴由hui.chen转至本版2014-11-5 17:04:55