Linux二进制查看工具——hexdump

目录

  • hexdump工具使用方法
    • 一、基本语法
    • 二、常用选项与示例
      • [1. 基础查看(默认格式)](#1. 基础查看(默认格式))
      • [2. 显示 ASCII 字符(`-C` 选项)](#2. 显示 ASCII 字符(-C 选项))
      • [3. 自定义每行显示字节数(`-n` 和 `-s`)](#3. 自定义每行显示字节数(-n-s))
      • [4. 简化输出(`-x`、`-d`、`-o` 等)](#4. 简化输出(-x-d-o 等))
      • [5. 自定义格式(`-e` 选项)](#5. 自定义格式(-e 选项))
      • [6. 其他实用选项](#6. 其他实用选项)
    • 三、典型使用场景
    • [四、与 `xxd` 对比](#四、与 xxd 对比)

hexdump工具使用方法

hexdump 是一款用于查看二进制文件或数据流的命令行工具,它能将二进制数据以十六进制、ASCII 等格式展示,常用于调试调试、分析文件结构或查看不可打印字符。以下是其核心用法和示例:

一、基本语法

bash 复制代码
hexdump [选项] [文件]

若不指定文件,默认从标准输入(如管道)读取数据。

二、常用选项与示例

1. 基础查看(默认格式)

不添加选项时,hexdump 以两列十六进制数(每列 16 字节)显示,右侧附带 ASCII 字符(不可打印字符用 . 表示):

bash 复制代码
hexdump test.bin

输出示例:

plaintext 复制代码
0000000 4865 6c6c 6f20 576f 726c 6421 0a00
000000d
  • 左侧 0000000 是偏移地址(十六进制)
  • 中间是十六进制数据(按 16 位分组)
  • 若启用 ASCII 显示,右侧会显示对应字符

2. 显示 ASCII 字符(-C 选项)

-C(或 --canonical)是最常用的选项之一,以规范格式显示:

  • 左侧:偏移地址
  • 中间:16 字节的十六进制(每行 16 字节,空格分隔)
  • 右侧:对应的 ASCII 字符(不可打印字符用 . 表示)
bash 复制代码
hexdump -C test.bin

输出示例:

plaintext 复制代码
00000000  48 65 6c 6c 6f 20 57 6f  72 6c 64 21 0a        |Hello World!.|
0000000d

3. 自定义每行显示字节数(-n-s

  • -n <数字>:只显示前 N 个字节
  • -s <偏移>:从文件的指定偏移量(十进制,加 0x 表示十六进制)开始显示
bash 复制代码
# 只显示前 10 个字节
hexdump -C -n 10 test.bin

# 从偏移量 0x05(十进制 5)开始显示
hexdump -C -s 0x05 test.bin

4. 简化输出(-x-d-o 等)

  • -x:以两字节为单位显示十六进制(默认格式)
  • -d:以两字节为单位显示十进制
  • -o:以两字节为单位显示八进制
  • -c:以单字节为单位显示 ASCII 字符(不可打印字符用转义序列)
bash 复制代码
# 单字节 ASCII 显示
hexdump -c test.bin

输出示例:

plaintext 复制代码
0000000   H   e   l   l   o       W   o   r   l   d   !  \n
000000d

5. 自定义格式(-e 选项)

通过 -e 可以自定义输出格式,适合特定场景(如解析协议格式)。格式语法:

plaintext 复制代码
hexdump -e '格式字符串' 文件

常用占位符:

  • %08_ax:8 位十六进制偏移地址(_a 表示地址,x 表示十六进制)
  • %02x:单字节十六进制(两位)
  • %c:ASCII 字符(不可打印用 .
  • \n:换行

示例:每行显示 8 字节,格式为「偏移 + 十六进制 + ASCII」

bash 复制代码
hexdump -e '%06_ax  ' -e '%02x ' -e '  |%c|\n' test.bin

输出示例:

plaintext 复制代码
000000  48 65 6c 6c 6f 20 57 6f  |Hello Wo|
000008  72 6c 64 21 0a           |rld!.|

6. 其他实用选项

  • -v:显示所有数据,不省略重复行(默认会用 * 省略连续重复内容)
  • -n:限制显示的总字节数(如 -n 100 只显示前 100 字节)
  • -s:跳过指定字节数后开始显示(如 -s 10 跳过前 10 字节)

三、典型使用场景

  1. 分析二进制文件结构:如查看图片、Protobuf 序列化数据等的二进制布局。
  2. 调试数据传输:对比发送 / 接收的二进制流,定位数据差异。
  3. 查看不可打印字符 :如日志中的控制字符(\r\n 等)。
  4. 验证文件格式 :如检查文件头标识(如 PNG 的 89 50 4E 47)。

四、与 xxd 对比

hexdumpxxd 功能类似,但 xxd 更简洁,且支持将文本转回二进制:

bash 复制代码
# 用 xxd 查看(类似 hexdump -C)
xxd test.bin

# 将 hex 文本转回二进制
xxd -r hex.txt test.bin

根据需求选择:hexdump 适合复杂格式定制,xxd 适合简单查看和转换。

相关推荐
AOwhisky11 小时前
Linux(CentOS)系统管理入门笔记(第四期)——文件系统(下篇):文件与目录操作实战——cpmvmkdirrmln
linux·运维·笔记·centos·云计算·文件系统
nianniannnn11 小时前
c++复习自存--标准模板库STL
开发语言·c++·windows
努力努力再努力wz12 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
岑梓铭12 小时前
考研408《操作系统》复习笔记,第四章《4.2.2 文件操作、文件共享、文件保护》
linux·考研·操作系统·文件系统·408
Robot_Nav12 小时前
C++ 面试常问问题汇总:基础语法、面向对象、STL、多线程与设计模式
c++·设计模式·面试
Mr.HeBoYan12 小时前
DPDK为什么越来越少使用rte_ring?——从Lock-Free到Run-to-Completion,重新理解现代DPDK架构演进(上)
linux·网络·算法·性能优化·架构·dpdk
盐焗鹌鹑蛋12 小时前
【C++】二叉搜索树
c++
哎呦,帅小伙哦12 小时前
C++工程实战: 预处理宏、宏重定义避坑、LOG_TAG业务实践与__COUNTER__深度解析
c++
IVVi0jToe13 小时前
高效C++线程池设计与实现
java·c++·安全
^yi13 小时前
【C++】内存管理
开发语言·c++