• 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

  • 相关阅读:
    【自动化测试不求人】python自动化测试对xml文件操作
    【自动化测试不求人】python自动化测试对json操作大全
    【自动测试不求人】每日1例无人值守自动化测试异常处理
    自动化测试不求人系列selenium自动化测试键盘事件ActionChains
    【自动化测试不求人】selenium ddt数据驱动模块
    国内常用NTP服务器地址及IP
    Centos语言问题
    linux下创建用户并设置密码
    CCNA Day1
    虚拟光驱导致无法安装光驱驱动的解决方法
  • 原文地址:https://www.cnblogs.com/klb561/p/11029440.html
Copyright © 2020-2023  润新知