2021-05-12 14:32:11
Linux中hexdump命令的使用
描述:
hexdump命令一般用來檢視"二進位制"檔案的十六進位制編碼,從手冊上檢視,其檢視的內容還要很多,諸如:ascii, decimal, hexadecimal, octal
引數:
hexdump [-bcCdovx] [-e format_string] [-f format_file] [-n length] [-s skip] file
範例:
新增一個文字檔案,在test 文字中新增如下內容:
[root@node61 test]# cat test
abcde
ABCDE
1)最簡單的檢視
[root@node61 test]# hexdump test
0000000 6261 6463 0a65 4241 4443 0a45
000000c
第一列:表示檔案檔案偏移量
第二列:已兩個位元組為一組的十六進位制
通過上面的輸出,翻譯成文字為:badc0aeBADC0aE(注意:在Linux中換行符n 的十六進位制為0a,在Windows中,換行為rn的十六進位制編碼為:0d 0a),另:下圖為ASC碼錶對應的進位制編碼
細心的讀者可能已經發現了,為什麼翻譯成文字成倒序了呢?文字中的內容不是:abcde
ABCDE 嗎?
其實這是X86的CPU架構所致,又進行了一番研究:位元組序
位元組序:其實就是位元組的順序,這裡是針對大於兩個位元組來說,一個位元組就沒有排序而言了,然而,在大部分的工作中,我們都很少直接和位元組序打交道。
位元組序分類兩類:Big-Endian 和Little-Endian
相關定義如下:
i) Little-Endian就是低位位元組排放在記憶體的低地址端,高位位元組排放在記憶體的高地址端。(X86 CPU系列採用的位序)
ii) Big-Endian就是高位位元組排放在記憶體的低地址端,低位位元組排放在記憶體的高地址端。
iii) 網路位元組序:TCP/IP各層協定將位元組序定義為Big-Endian,因此TCP/IP協定中使用的位元組序通常稱之為網路位元組序。
下面的這個程式是用來判斷CPU採用的是哪種模式?
#include<stdio.h>
int main(){
union w
{
int a;
char b;
} c;
c.a = 1;
if (c.b==1){
printf("The CPU is Litle-Endiann");
}else{
printf("The CPU is Big-Endiann");
}
return 0;
} / end checkCPU/
gcc -o checkCPU.o checkCPU.c
[root@node61 test]# ./checkCPU.o
The CPU is Litle-Endian
本人本地虛擬機器的是X86的小端模式的
至此上面使用hexdump為什麼是順序是倒著的原因了
有沒有更加較便於方便的檢視方式了?有,這也是較常用的方式,見下面的b)介紹;
b)以16進位制和相應的ASCII字元顯示檔案裡的字元
[root@node61 test]# hexdump -C test #常用
00000000 61 62 63 64 65 0a 41 42 43 44 45 0a |abcde.ABCDE.|
0000000c
這裡既能顯示16進位制也能顯示ascii碼
c)以偏移量格式輸出,引數 -s
[root@node61 test]# hexdump -C test
00000000 61 62 63 64 65 0a 41 42 43 44 45 0a |abcde.ABCDE.|
0000000c
[root@node61 test]# hexdump -C -s 6 test
00000006 41 42 43 44 45 0a |ABCDE.|
0000000c
第一行的abcde換行 的字元都沒有了
其他hexdump還有很多的用法,具體可以參看man hexdump
相關文章