首頁 > 軟體

Linux中hexdump命令的使用

2020-06-16 16:34:36

描述:

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


IT145.com E-mail:sddin#qq.com