hexdump命令使用

本文详细介绍了hexdump命令的使用方法,包括基本用法、参数选项、高级用法以及展示实例,帮助读者深入理解并灵活运用此命令进行十六进制文件操作。

hexdump命令是Linux下的打印16进制的利器,它可以按我们指定的格式输出16进制,特别有用,配合eeprom来用简直是绝配。

今天我们来介绍一个hexdump命令的使用:


首先我们准备一个测试用的文件test,十六进制如下:

  1. 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  
  2. 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  
  3. 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F  
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F


选项:


-n length

只格式化输入文件的前length个字节



-C 输出十六进制和对应字符

输入:

  1. hexdump -n 13 -C test  
hexdump -n 13 -C test

输出:

  1. 00000000  00 01 02 03 04 05 06 07  08 09 0a 0b 0c           |.............|  
  2. 0000000d  
00000000  00 01 02 03 04 05 06 07  08 09 0a 0b 0c           |.............|
0000000d



-s 从偏移量开始输出

输入:

  1. hexdump -n 13 -C -s 30 test  
 hexdump -n 13 -C -s 30 test

输出:

  1. 0000001e  1e 1f 20 21 22 23 24 25  26 27 28 29 2a           |.. !"#$%&'()*|  
  2. 0000002b  
0000001e  1e 1f 20 21 22 23 24 25  26 27 28 29 2a           |.. !"#$%&'()*|
0000002b



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:
输入:
  1. hexdump -e '16/1 "%02X " "  |  "' -e '16/1 "%_p" "\n"' test  
 hexdump -e '16/1 "%02X " "  |  "' -e '16/1 "%_p" "\n"' test
输出:
  1. 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  |  ................  
  2. 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  |  ................  
  3. 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F  |   !"#$%&'()*+,-./  
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  |  ................
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  |  ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F  |   !"#$%&'()*+,-./



例2:
输入:
  1. hexdump -e '1/1 "0x%08_ax "' -e '8/1 "%02X " " *  "' -e '8/1 "%_p" "\n"' test  
hexdump -e '1/1 "0x%08_ax "' -e '8/1 "%02X " " *  "' -e '8/1 "%_p" "\n"' test
输出:
  1. 0x00000000 00 01 02 03 04 05 06 07 *  ........  
  2. 0x00000008 08 09 0A 0B 0C 0D 0E 0F *  ........  
  3. 0x00000010 10 11 12 13 14 15 16 17 *  ........  
  4. 0x00000018 18 19 1A 1B 1C 1D 1E 1F *  ........  
  5. 0x00000020 20 21 22 23 24 25 26 27 *   !"#$%&'  
  6. 0x00000028 28 29 2A 2B 2C 2D 2E 2F *  ()*+,-./  
0x00000000 00 01 02 03 04 05 06 07 *  ........
0x00000008 08 09 0A 0B 0C 0D 0E 0F *  ........
0x00000010 10 11 12 13 14 15 16 17 *  ........
0x00000018 18 19 1A 1B 1C 1D 1E 1F *  ........
0x00000020 20 21 22 23 24 25 26 27 *   !"#$%&'
0x00000028 28 29 2A 2B 2C 2D 2E 2F *  ()*+,-./



例3:
输入:
  1. hexdump -e '1/1 "%02_ad#    "' -e '/1 "hex = %02X * "' -e '/1 "dec = %03d | "' -e '/1 "oct = %03o"' -e '/1 " \_\n"' -n 20 test  
hexdump -e '1/1 "%02_ad#    "' -e '/1 "hex = %02X * "' -e '/1 "dec = %03d | "' -e '/1 "oct = %03o"' -e '/1 " \_\n"' -n 20 test
输出:
  1. 00#    hex = 00 * dec = 000 | oct = 000 _  
  2. 01#    hex = 01 * dec = 001 | oct = 001 _  
  3. 02#    hex = 02 * dec = 002 | oct = 002 _  
  4. 03#    hex = 03 * dec = 003 | oct = 003 _  
  5. 04#    hex = 04 * dec = 004 | oct = 004 _  
  6. 05#    hex = 05 * dec = 005 | oct = 005 _  
  7. 06#    hex = 06 * dec = 006 | oct = 006 _  
  8. 07#    hex = 07 * dec = 007 | oct = 007 _  
  9. 08#    hex = 08 * dec = 008 | oct = 010 _  
  10. 09#    hex = 09 * dec = 009 | oct = 011 _  
  11. 10#    hex = 0A * dec = 010 | oct = 012 _  
  12. 11#    hex = 0B * dec = 011 | oct = 013 _  
  13. 12#    hex = 0C * dec = 012 | oct = 014 _  
  14. 13#    hex = 0D * dec = 013 | oct = 015 _  
  15. 14#    hex = 0E * dec = 014 | oct = 016 _  
  16. 15#    hex = 0F * dec = 015 | oct = 017 _  
  17. 16#    hex = 10 * dec = 016 | oct = 020 _  
  18. 17#    hex = 11 * dec = 017 | oct = 021 _  
  19. 18#    hex = 12 * dec = 018 | oct = 022 _  
  20. 19#    hex = 13 * dec = 019 | oct = 023 _  
<think>我们正在讨论hexdump命令,用户请求获取该命令的详细解释。根据之前的对话历史,用户已经对`hexdump -C`有了一定的了解,现在希望获得更全面的命令解释。 参考引用资料: - 引用[1]和[2]介绍了hexdump的基本用途:查看和解析二进制文件,以十六进制格式显示文件内容。 - 引用[4]提供了详细的参数说明(基于RHEL 5.7)。 - 引用[5]展示了使用`hexdump -C`的典型输出示例。 结合这些信息,我应当构建一个全面的解释,包括: 1. 命令的基本功能和典型应用场景 2. 核心参数详解(特别是常用参数如-C, -n, -s等) 3. 输出格式解析(重点说明-C格式的双栏显示) 4. 实际使用示例 5. 与其他工具(如xxd, od)的简单对比 特别注意:用户要求使用中文回答,数学表达式需用$...$或$$...$$格式(但hexdump解释中数学表达式较少,可能涉及偏移量计算时使用)。 由于hexdump参数较多,我将重点解释最常用的参数,避免信息过载。同时,根据引用[3]和[5]的示例,加入实际命令示例。 最后,按照要求生成相关问题。 </think>### `hexdump` 命令详解 `hexdump` 是 Linux 中用于**以十六进制、十进制或 ASCII 格式解析文件二进制内容**的核心工具,适用于二进制文件分析、数据结构调试和隐藏内容检测[^1][^2]。 --- #### **一、核心功能与用途** 1. **二进制文件分析** - 查看 ELF 可执行文件头、图片元数据等二进制结构。 - 检测文件中的非打印字符(如空字符 `0x00`)。 2. **数据格式转换** - 支持十六进制(`-x`)、八进制(`-o`)、十进制(`-d`)、ASCII(`-c`)多种格式输出。 3. **偏移量定位** - 左侧列显示**十六进制偏移地址**(如 `00000000`),便于精确定位数据位置。 --- #### **二、命令语法** ```bash hexdump [选项] 文件名 ``` 或简写为: ```bash hd [选项] 文件名 # 部分系统支持 ``` --- #### **三、常用参数详解** | 参数 | 作用 | 示例 | |------|------|------| | **`-C`** | **规范格式(十六进制 + ASCII 双栏)** | `hexdump -C file.bin` | | **`-n N`** | 仅解析前 N 字节 | `hexdump -n 64 file` | | **`-s OFFSET`** | 从指定偏移开始解析 | `hexdump -s 0x100 file` | | **`-v`** | 禁用重复行压缩(显示全部原始数据) | `hexdump -Cv file` | | **`-x`** | 双字节十六进制输出 | `hexdump -x file` | | **`-e fmt`** | **自定义格式**(高级用法) | 见下文 | --- #### **四、输出格式解析(以 `-C` 为例)** ```bash 00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| ``` 1. **左侧:偏移地址** `00000000` 表示当前行的起始字节位置(十六进制)。 2. **中部:十六进制数据** - 每行默认 16 字节,每 8 字节用空格分隔(`7f 45 ... 00 00`)。 3. **右侧:ASCII 映射** - 可打印字符显示原字符(如 `.`、`E`、`L`)。 - 可打印字符(如 `0x00`)显示为 `.`。 - UTF-8 等多字节字符**无法完整显示**,会被拆分为单字节处理[^5]。 --- #### **五、自定义格式(`-e` 高级用法)** 通过 `-e` 定义解析规则: ```bash hexdump -e '格式字符串' 文件 ``` - **示例 1**:每字节显示为 8 位十六进制 ```bash hexdump -e '/1 "%08X "' file # 输出:0000007F 00000045 ... ``` - **示例 2**:解析 4 字节整数(小端序) ```bash hexdump -e '/4 "%d "' file # 若数据为 01 00 00 00 → 输出:1 ``` - **格式符号**: - `/1`:单字节单位 - `/4 "%d"`:4 字节按十进制整数解析 - `"%08X"`:8 位十六进制(补零对齐) --- #### **六、典型应用场景** 1. **查看二进制文件头** ```bash hexdump -C -n 32 /bin/ls # 解析 ls 命令前 32 字节 ``` 2. **检测文本中的隐藏字符** ```bash echo -e "Hello\x00World" | hexdump -C ``` 输出: ``` 00000000 48 65 6c 6c 6f 00 57 6f 72 6c 64 |Hello.World| ``` 3. **网络数据包分析** ```bash tcpdump -i eth0 -w packet.pcap # 抓包 hexdump -C -s 14 -n 20 packet.pcap # 解析 IP 头(偏移 14 字节) ``` --- #### **七、与其他工具对比** | 命令 | 特点 | 适用场景 | |---------------|-------------------------------|----------------------| | `hexdump -C` | 规范双栏输出+偏移地址 | 二进制结构分析 | | `xxd` | 类似 `-C`,支持反向生成二进制 | 二进制编辑 | | `od -x` | 纯十六进制输出(无 ASCII 栏) | 原始数据提取 | > 注意:Linux 发行版的 `hexdump` 参数可能略有差异,建议通过 `man hexdump` 查看本地帮助[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值