hexdump指令工具,可以把檔案以16進制的方式給呈現出來。這個工具對一些*.ko, *.o, *.bin, *.hex的檔案分析非常有用。因為並不是所有的檔案都可以用cat指令完美的呈現,因為檔案之中若是有一些控制字元,文字編輯軟體是無法正確地顯示。當然,為了展現這個指令工具的用法,會先編輯一個簡單的文字檔來操作:
[root@localhost ~]# [root@localhost ~]# cat -n ./hexdump.TXT 1 ABCDEFGHIJKLMNOP 2 QRSTUVWXYZ012345 3 6789abcdefghijkl 4 mnopqrstuvwxyz~! 5 @#$%^&*()_+{}[] [root@localhost ~]#首先,要看得懂這種格式表示法,最左上方的"0000000"是指開始的位置,每一行是以16 Bytes做為單位來表示,所以到了第2行,就是原本的"0000000"再加上16,即16進位的"0000010"。以此類推。
1. "-b":把所要呈現的資料以8進制來表示。'A'的16進制值是0x41,轉換成8進制就是101。
[root@localhost ~]# [root@localhost ~]# hexdump -b ./hexdump.TXT 0000000 101 102 103 104 105 106 107 110 111 112 113 114 115 116 117 120 0000010 012 121 122 123 124 125 126 127 130 131 132 060 061 062 063 064 0000020 065 012 066 067 070 071 141 142 143 144 145 146 147 150 151 152 0000030 153 154 012 155 156 157 160 161 162 163 164 165 166 167 170 171 0000040 172 176 041 012 100 043 044 045 136 046 052 050 051 137 053 173 0000050 175 133 135 012 0000054 [root@localhost ~]#2. "-c":把每1個Byte,以ASCII碼來顯示。
[root@localhost ~]# [root@localhost ~]# hexdump -c ./hexdump.TXT 0000000 A B C D E F G H I J K L M N O P 0000010 \n Q R S T U V W X Y Z 0 1 2 3 4 0000020 5 \n 6 7 8 9 a b c d e f g h i j 0000030 k l \n m n o p q r s t u v w x y 0000040 z ~ ! \n @ # $ % ^ & * ( ) _ + { 0000050 } [ ] \n 0000054 [root@localhost ~]#3. "-C":把每1個Byte,除了以16進制表示之外,還同時顯示相對應的ASCII碼。
[root@localhost ~]# [root@localhost ~]# hexdump -C ./hexdump.TXT 00000000 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 |ABCDEFGHIJKLMNOP| 00000010 0a 51 52 53 54 55 56 57 58 59 5a 30 31 32 33 34 |.QRSTUVWXYZ01234| 00000020 35 0a 36 37 38 39 61 62 63 64 65 66 67 68 69 6a |5.6789abcdefghij| 00000030 6b 6c 0a 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 |kl.mnopqrstuvwxy| 00000040 7a 7e 21 0a 40 23 24 25 5e 26 2a 28 29 5f 2b 7b |z~!.@#$%^&*()_+{| 00000050 7d 5b 5d 0a |}[].| 00000054 [root@localhost ~]#4. "-d":以每2個Bytes為單位,顯示出相對應的10進制值。'A'是0x41,'B'是0x42,所以合起來就是0x4241,轉換成10進制就是16961。
[root@localhost ~]# [root@localhost ~]# hexdump -d ./hexdump.TXT 0000000 16961 17475 17989 18503 19017 19531 20045 20559 0000010 20746 21330 21844 22358 22872 12378 12849 13363 0000020 02613 14134 14648 25185 25699 26213 26727 27241 0000030 27755 27914 28526 29040 29554 30068 30582 31096 0000040 32378 02593 09024 09508 09822 10282 24361 31531 0000050 23421 02653 0000054 [root@localhost ~]#5. "-o":以每2個Bytes為單位,顯示出相對應的8進制值。10進制的16961,轉換成8進制就是041101 (固定6碼,不足補0)。
[root@localhost ~]# [root@localhost ~]# hexdump -o ./hexdump.TXT 0000000 041101 042103 043105 044107 045111 046113 047115 050117 0000010 050412 051522 052524 053526 054530 030132 031061 032063 0000020 005065 033466 034470 061141 062143 063145 064147 065151 0000030 066153 066412 067556 070560 071562 072564 073566 074570 0000040 077172 005041 021500 022444 023136 024052 057451 075453 0000050 055575 005135 0000054 [root@localhost ~]#6. "-v":嗯....這個參數的用途....仔細看,它並不是以0x41, 0x42, 0x43, 0x44,而是以每2 Bytes為單位,後面的排在前面; 這種排列方示,是跟系統的位元組順序 (Byte Order)有關。
[root@localhost ~]# [root@localhost ~]# hexdump -v ./hexdump.TXT 0000000 4241 4443 4645 4847 4a49 4c4b 4e4d 504f 0000010 510a 5352 5554 5756 5958 305a 3231 3433 0000020 0a35 3736 3938 6261 6463 6665 6867 6a69 0000030 6c6b 6d0a 6f6e 7170 7372 7574 7776 7978 0000040 7e7a 0a21 2340 2524 265e 282a 5f29 7b2b 0000050 5b7d 0a5d 0000054 [root@localhost ~]#7. "-x":嗯....此一參數的功能和"-v"非常類似....
[root@localhost ~]# [root@localhost ~]# hexdump -x ./hexdump.TXT 0000000 4241 4443 4645 4847 4a49 4c4b 4e4d 504f 0000010 510a 5352 5554 5756 5958 305a 3231 3433 0000020 0a35 3736 3938 6261 6463 6665 6867 6a69 0000030 6c6b 6d0a 6f6e 7170 7372 7574 7776 7978 0000040 7e7a 0a21 2340 2524 265e 282a 5f29 7b2b 0000050 5b7d 0a5d 0000054 [root@localhost ~]#8. "-n":只顯示前n個Bytes的資料。
[root@localhost ~]# [root@localhost ~]# hexdump -C -n 24 ./hexdump.TXT 00000000 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 |ABCDEFGHIJKLMNOP| 00000010 0a 51 52 53 54 55 56 57 |.QRSTUVW| 00000018 [root@localhost ~]#9. "-s":從偏移量 (Offset)開始輸出;例如:我要從第8個Byte開始輸出,只輸出24個Bytes的資料:
[root@localhost ~]# [root@localhost ~]# hexdump -C -s 8 -n 24 ./hexdump.TXT 00000008 49 4a 4b 4c 4d 4e 4f 50 0a 51 52 53 54 55 56 57 |IJKLMNOP.QRSTUVW| 00000018 58 59 5a 30 31 32 33 34 |XYZ01234| 00000020 [root@localhost ~]#以上,是hexdump指令工具的基礎用法;而[-e format_string]和[-f format_file]是比較高階的用法,這一部份我還沒研究,不過上述的9個參數,應該就可以滿足大部份程式員工作上的需求。
沒有留言:
張貼留言