zoukankan      html  css  js  c++  java
  • Linux命令:hexdump

    hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。

    指令所在路径:/usr/bin/hexdump

    命令语法:

    hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]

    命令参数:

    此命令参数是Red Hat Enterprise Linux Server release 5.7下hexdump命令参数,不同版本Linux的hexdump命令参数有可能不同。

    参数

    长参数

    描叙

    -b

     

    每个字节显示为8进制。一行共16个字节,一行开始以十六进制显示偏移值

    -c

     

    每个字节显示为ASCII字符

    -C

     

    每个字节显示为16进制和相应的ASCII字符

    -d

     

    两个字节显示为10进制

    -e

     

    格式化输出

    -f

     

    Specify a file that contains one or more newline separated format strings.  Empty lines and lines whose first non-blank character is a hash mark (#) are ignored.

    -n

     

    只格式前n个长度的字符

    -o

     

    两个字节显示为8进制

    -s

     

    从偏移量开始输出

    -v

     

    The -v option causes hexdump to display all input data.  Without the -v option, any number of groups of output lines, which would be identical to the immediately preceding group of output lines

    -x

     

    双字节十六进制显示

    使用示例:

    hexdump高级用法:
     
    -e 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:
    'a/b "format1" "format2"'
     
    每个格式字符串由三部分组成,每个由空格分隔,第一个形如a/b,b表示对每b个输入字节应用format1格式,a表示对每a个输入字节应用format2格式,一般a>b,且b只能为1,2,4,另外a可以省略,省略则a=1。format1和format2中可以使用类似printf的格式字符串,如:
    %02d:两位十进制
    %03x:三位十六进制
    %02o:两位八进制
    %c:单个字符等
     
    还有一些特殊的用法:
    %_ad:标记下一个输出字节的序号,用十进制表示
    %_ax:标记下一个输出字节的序号,用十六进制表示
    %_ao:标记下一个输出字节的序号,用八进制表示
    %_p:对不能以常规字符显示的用.代替
    同一行如果要显示多个格式字符串,则可以跟多个-e选项

    1: 查看hexdmp命令的帮助信息

    [root@DB-Server ~]# man hexdump

    2: 以8进制显示文件里面的字符。

    [root@DB-Server ~]# cat >test.txt
    ABCDEF    
    GHIJKM
    123456
    [root@DB-Server ~]#  hexdump -b test.txt
    0000000 101 102 103 104 105 106 012 107 110 111 112 113 115 012 061 062
    0000010 063 064 065 066 012                                            
    0000015

    注意:一行共16个字节,一行开始以十六进制显示偏移值(如下所示,第一行字符串只显示到D,第十六个字节,后面的F12*DFDF换行显示)

    [root@DB-Server ~]# cat >test.txt
    ABCDEFGHIJKLMNODF12*DFDF
     
    [2]+  Stopped                 cat > test.txt
    You have new mail in /var/spool/mail/root
    [root@DB-Server ~]# hexdump -b test.txt 
    0000000 101 102 103 104 105 106 107 110 111 112 113 114 115 116 117 104
    0000010 106 061 062 052 104 106 104 106 012                            
    0000019
    [root@DB-Server ~]# hexdump -c test.txt 
    0000000   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   D
    0000010   F   1   2   *   D   F   D   F  
                                
    0000019

    3:以ASCII字符显示文件中字符

    [root@DB-Server ~]# hexdump -c test.txt 
    0000000   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   D
    0000010   F   1   2   *   D   F   D   F  
                                
    0000019
     

    hexdump 以ASCII字符显示时,可以输出换行符,这个功能可以用来检查文件是Linux的换行符格式还是Widows格式换行符。如下所示

    4:以16进制和相应的ASCII字符显示文件里的字符

    [root@DB-Server ~]# hexdump -C test.txt 
    00000000  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e 4f 44  |ABCDEFGHIJKLMNOD|
    00000010  46 31 32 2a 44 46 44 46  0a                       |F12*DFDF.|
    00000019

    5:只格式文件中前n个字符

    [root@DB-Server ~]# hexdump -C -n 5 test.txt 
    00000000  41 42 43 44 45                                    |ABCDE|
    00000005

    6:以偏移量开始格式输出。如下所示指定参数-s 5 ,前面的ABCDE字符没有了。

     
    [root@DB-Server ~]# hexdump -C test.txt 
    00000000  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e 4f 44  |ABCDEFGHIJKLMNOD|
    00000010  46 31 32 2a 44 46 44 46  0a                       |F12*DFDF.|
    00000019
    [root@DB-Server ~]# hexdump -C -s 5 test.txt 
    00000005  46 47 48 49 4a 4b 4c 4d  4e 4f 44 46 31 32 2a 44  |FGHIJKLMNODF12*D|
    00000015  46 44 46 0a                                       |FDF.|

    使用举例

    C语言保存二进制文件test

    #include <stdio.h>
    #include <stdlib.h>

    int main() {
    FILE *fp_in;
    fp_in = fopen("test", "wb");
    if (fp_in == NULL) {
    printf("open test failed ");
    return -1;
    }
    else {
    for (unsigned char i = 0; i < 100; i++) {
    fwrite(&i ,sizeof(unsigned char), 1, fp_in);
    }
    fclose(fp_in);
    }
    return 0;
    }

    编译:g++ main.cpp -o main
    执行:./main即可生成二进制文件test

    格式化输出文件

    hexdump test

    格式化输出文件的前10个字节

    hexdump -n 10 test

    格式化输出文件的前10个字节,并以16进制显示

    hexdump -n 10 -C test

    格式化输出从10开始的10个字节,并以16进制显示

    hexdump -n 10 -C -s 20

    格式化输出文件字符

    hexdump -e ‘16/1 “%02X ” ” | “’ -e ‘16/1 “%_p” “ ”’ test

    hexdump -e ‘1/1 “0x%08_ax “’ -e ‘8/1 “%02X ” ” * “’ -e ‘8/1 “%_p” “ ”’ test

    hexdump -e ‘1/1 “%02_ad# “’ -e ‘/1 “hex = %02X * “’ -e ‘/1 “dec = %03d | “’ -e ‘/1 “oct = %03o”’ -e ‘/1 ” _ ”’ -n 20 test

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/klb561/p/11029440.html
Copyright © 2011-2022 走看看