news 2026/7/26 8:06:45

Linux二进制文件查看工具:xxd与hexdump详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux二进制文件查看工具:xxd与hexdump详解

在日常开发工作中,我们经常需要查看二进制文件的内容,比如分析程序的可执行文件、调试网络数据包、检查文件格式等。直接使用文本编辑器打开二进制文件会显示乱码,这时候就需要专门的二进制查看工具。本文将详细介绍 Linux 系统中两个强大的二进制查看命令:xxd 和 hexdump,通过实际示例展示它们的各种用法和适用场景。

无论你是系统管理员、安全研究员还是嵌入式开发者,掌握这些工具都能让你更深入地理解文件结构和数据存储方式。本文将涵盖从基础用法到高级技巧的完整内容,帮助你在实际工作中快速定位问题。

1. 二进制文件查看基础概念

1.1 什么是二进制文件

二进制文件是以二进制格式存储数据的文件,与文本文件相对。文本文件只包含可打印字符(字母、数字、标点等),而二进制文件可以包含任何字节值(0-255)。常见的二进制文件包括可执行程序、图像、音频、视频、数据库文件等。

1.2 为什么需要查看二进制文件

查看二进制文件的主要目的包括:

  • 调试程序:分析可执行文件的代码段和数据段
  • 文件格式分析:了解特定文件格式的结构
  • 数据恢复:从损坏的文件中提取有用信息
  • 安全分析:检测恶意代码或分析网络数据包
  • 嵌入式开发:查看固件或内存映像

1.3 十六进制表示法的优势

二进制查看工具通常以十六进制格式显示文件内容,这是因为:

  • 十六进制比二进制更紧凑:一个字节只需两个十六进制数字表示
  • 便于与ASCII对照:每行可以同时显示十六进制和对应的ASCII字符
  • 行业标准:调试器、反汇编器等工具都采用这种表示法

2. xxd 命令详解

2.1 xxd 命令基本介绍

xxd 是一个功能强大的十六进制转储工具,可以将文件内容以十六进制格式显示,同时也支持将十六进制转储还原为二进制文件。它是 vim 编辑器的一部分,在大多数 Linux 发行版中默认安装。

2.2 基本使用方法

最简单的用法是直接查看文件内容:

# 查看文件的十六进制内容 xxd filename # 示例:查看 /bin/ls 的前几行 xxd /bin/ls | head -5

输出格式通常包含三列:偏移量、十六进制数据和ASCII字符。偏移量表示当前行在文件中的起始位置(以字节为单位)。

2.3 常用选项详解

2.3.1 显示控制选项
# 每行显示指定字节数(默认16字节) xxd -c 8 filename # 每行显示8字节 xxd -c 32 filename # 每行显示32字节 # 从指定偏移量开始显示 xxd -s 100 filename # 从第100字节开始 xxd -s +100 filename # 跳过前100字节 xxd -s -100 filename # 显示最后100字节 # 限制显示长度 xxd -l 64 filename # 只显示前64字节
2.3.2 格式控制选项
# 分组显示(默认每组2字节) xxd -g 1 filename # 每组1字节 xxd -g 4 filename # 每组4字节 xxd -g 8 filename # 每组8字节 # 大写字母显示 xxd -u filename # 二进制格式显示(很少使用) xxd -b filename
2.3.3 特殊用途选项
# 生成C语言数组格式 xxd -i filename # 示例:生成C数组 echo "hello" > test.txt xxd -i test.txt

输出结果:

unsigned char test_txt[] = { 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x0a }; unsigned int test_txt_len = 6;

2.4 反向操作:从十六进制转储恢复文件

xxd 的一个重要特性是能够将十六进制转储还原为原始文件:

# 生成十六进制转储 xxd original_file > hex_dump.txt # 从转储文件恢复原始文件 xxd -r hex_dump.txt recovered_file # 验证文件一致性 diff original_file recovered_file

3. hexdump 命令详解

3.1 hexdump 命令概述

hexdump 是另一个常用的二进制文件查看工具,比 xxd 功能更丰富,支持多种输出格式和自定义显示方式。它属于 util-linux 软件包,在大多数 Linux 系统中默认安装。

3.2 基本使用方法

# 基本用法 hexdump filename # 规范格式显示(最常用) hexdump -C filename

-C 选项(规范格式)会同时显示:

  • 偏移地址(十六进制)
  • 十六进制字节(每行16字节)
  • ASCII字符表示

3.3 常用选项详解

3.3.1 显示控制选项
# 限制显示长度 hexdump -n 100 filename # 显示前100字节 hexdump -n 100 -s 50 filename # 从50字节开始显示100字节 # 跳过指定字节数 hexdump -s 100 filename # 跳过前100字节
3.3.2 输出格式选项

hexdump 支持多种数字格式显示:

# 不同进制显示 hexdump -b filename # 八进制(单字节) hexdump -c filename # 字符格式 hexdump -d filename # 十进制(双字节) hexdump -o filename # 八进制(双字节) hexdump -x filename # 十六进制(双字节)

3.4 高级格式控制

hexdump 最强大的功能是通过 -e 选项自定义输出格式:

# 自定义格式示例 hexdump -e '16/1 "%02x " " |"' -e '16/1 "%_p" "\n"' filename # 解释: # 16/1 "%02x " - 每字节以十六进制显示,共16字节 # " |" - 分隔符 # 16/1 "%_p" - 每字节以字符显示(不可打印字符显示为点) # "\n" - 换行

更复杂的格式示例:

# 显示偏移量+十六进制+ASCII hexdump -e '"%07.7_ax " 8/1 "%02x " " " 8/1 "%02x " " |"' -e '16/1 "%_p" "\n"' filename

4. 实际应用案例

4.1 分析可执行文件

# 查看ELF文件头 xxd -l 64 /bin/ls hexdump -C -n 64 /bin/ls

通过分析输出,可以识别ELF魔数(7f 45 4c 46)、文件类型(ELF32/ELF64)等信息。

4.2 检查文件类型签名

很多文件格式有特定的魔数(magic number):

# 查看PNG图片文件头 echo -e "\x89PNG\r\n\x1a\n" > test.png xxd -l 8 test.png # 查看PDF文件头 echo "%PDF-1.5" > test.pdf xxd -l 8 test.pdf

4.3 分析网络数据包

# 保存网络数据包并分析 tcpdump -c 1 -w packet.pcap xxd packet.pcap | head -20

4.4 调试嵌入式系统数据

# 查看固件文件 xxd firmware.bin | grep -A5 -B5 "特定模式" # 分析传感器数据 hexdump -C sensor_data.bin

5. VIM 与 xxd 结合使用

5.1 在 VIM 中查看二进制文件

VIM 配合 xxd 可以实现在编辑器中查看和编辑二进制文件:

# 以二进制模式打开文件 vim -b filename # 在VIM中转换为十六进制显示 # 输入命令模式,执行: :%!xxd

5.2 编辑二进制文件

在 VIM 的十六进制模式下:

  1. 直接修改十六进制数值
  2. 修改ASCII字符部分
  3. 执行:%!xxd -r转换回二进制格式
  4. 保存文件

重要提醒:编辑二进制文件有风险,务必先备份原文件。

5.3 实用技巧

# 在VIM中设置快捷键 # 在 ~/.vimrc 中添加: noremap <F8> :%!xxd<CR> noremap <F9> :%!xxd -r<CR>

6. 转义字符与二进制数据

6.1 理解转义字符

在编程中,转义字符用于表示不可打印字符:

// C语言中的转义字符示例 char *newline = "\n"; // 换行符 (0x0a) char *tab = "\t"; // 制表符 (0x09) char *null_byte = "\0"; // 空字符 (0x00)

6.2 十六进制和八进制转义

// 十六进制转义 char *str1 = "\x48\x65\x6c\x6c\x6f"; // "Hello" // 八进制转义 char *str2 = "\110\145\154\154\157"; // "Hello" // 混合使用 char *complex = "Line1\x0aLine2\x0a"; // 两行文本

6.3 在 shell 中创建测试数据

# 使用printf创建包含特定字节的文件 printf '\x48\x65\x6c\x6c\x6f\x0a' > hello.bin xxd hello.bin # 创建包含不可打印字符的文件 printf 'Test\x00Data\xff\xfe' > test.bin hexdump -C test.bin

7. 性能比较与选择建议

7.1 xxd 与 hexdump 对比

特性xxdhexdump
安装来源vim 包util-linux 包
反向操作支持 (-r)不支持
格式灵活性一般很强 (-e)
输出美观度较好优秀 (-C)
学习曲线简单中等

7.2 使用场景建议

选择 xxd 当:

  • 需要将十六进制转储还原为二进制文件
  • 生成C语言数组格式的数据
  • 简单的二进制文件查看需求
  • 与VIM配合编辑二进制文件

选择 hexdump 当:

  • 需要高度自定义的输出格式
  • 查看大型文件时要求美观的输出
  • 需要多种数字格式显示(八进制、十进制等)
  • 进行复杂的二进制数据分析

7.3 性能考虑

对于大文件,两个命令的性能差异不大,但可以通过以下方式优化:

# 只查看文件部分内容(提高速度) xxd -l 4096 large_file.bin hexdump -C -n 4096 large_file.bin # 结合grep快速搜索模式 xxd file.bin | grep "特定模式" hexdump -C file.bin | grep "模式"

8. 常见问题与解决方案

8.1 权限问题

# 如果文件不可读 sudo xxd /root/protected_file.bin # 或者改变文件权限 chmod +r filename.bin

8.2 文件编码问题

# 检查文件是否包含BOM标记 xxd -l 3 utf8_file.txt # EF BB BF 表示UTF-8 BOM # 查看文本文件的二进制表示 echo "Hello 中文" > test.txt xxd test.txt

8.3 大文件处理技巧

# 分页查看 xxd large_file.bin | less # 只查看特定区域(计算偏移量) xxd -s 0x1000 -l 0x100 large_file.bin # 保存感兴趣的部分到新文件 xxd -s 0x1000 -l 0x100 large_file.bin > segment.hex xxd -r segment.hex segment.bin

8.4 调试脚本示例

#!/bin/bash # 二进制文件分析脚本 FILE="$1" OFFSET="${2:-0}" LENGTH="${3:-256}" echo "=== 文件信息 ===" file "$FILE" echo "大小: $(stat -c%s "$FILE") 字节" echo echo "=== 十六进制查看 (偏移: $OFFSET, 长度: $LENGTH) ===" xxd -s "$OFFSET" -l "$LENGTH" "$FILE" echo echo "=== ASCII 字符串 ===" strings -n 4 "$FILE" | head -20

9. 高级技巧与最佳实践

9.1 自动化分析脚本

#!/bin/bash # 高级二进制文件分析工具 analyze_binary() { local file=$1 echo "=== 基本文件信息 ===" file "$file" ls -lh "$file" echo echo "=== 文件头分析 ===" xxd -l 64 "$file" echo echo "=== 字符串提取 ===" strings -n 8 "$file" | head -30 echo echo "=== 熵分析 (检测加密/压缩) ===" ent "$file" 2>/dev/null || echo "安装ent工具进行熵分析" } # 使用示例 analyze_binary "$1"

9.2 结合其他工具使用

# 结合od命令(八进制转储) od -x filename # 十六进制输出 od -c filename # 字符输出 # 结合file命令识别文件类型 file unknown_file.bin # 结合strings提取可读文本 strings binary_file | grep -i "keyword" # 结合binutils工具集 objdump -h executable_file # 查看段信息 readelf -h executable_file # ELF文件头信息

9.3 安全注意事项

  1. 备份原文件:编辑二进制文件前务必备份
  2. 权限管理:不要随意修改系统二进制文件
  3. 病毒扫描:分析未知文件前进行安全扫描
  4. 法律合规:只分析自己有权限访问的文件

9.4 生产环境使用建议

# 在脚本中使用xxd进行数据验证 validate_file() { local file=$1 local expected_checksum=$2 actual_checksum=$(xxd "$file" | md5sum | cut -d' ' -f1) if [ "$actual_checksum" = "$expected_checksum" ]; then echo "文件验证成功" return 0 else echo "文件验证失败" return 1 fi } # 二进制数据提取函数 extract_binary_section() { local input_file=$1 local output_file=$2 local start_offset=$3 local length=$4 xxd -s "$start_offset" -l "$length" "$input_file" > temp.hex xxd -r temp.hex "$output_file" rm temp.hex }

通过系统学习 xxd 和 hexdump 的使用方法,你可以在日常工作中更有效地分析二进制文件,快速定位问题。这些工具虽然简单,但在调试、逆向工程、数据恢复等场景中发挥着重要作用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 8:04:58

LLM训练数据估值:高效影响函数与随机投影技术

1. 论文核心价值解析 这篇NIPS 2024论文提出了一个突破性的数据估值框架&#xff0c;专门针对大语言模型(LLM)训练场景。传统的数据估值方法在GPT级别的模型上面临三大困境&#xff1a;计算复杂度爆炸、参数规模不匹配、以及分布式训练带来的评估难题。作者团队创新性地将影响函…

作者头像 李华
网站建设 2026/7/26 8:04:27

Kaggle房价预测实战:从特征工程到PyTorch模型优化

1. 项目概述作为一名长期从事推荐系统开发的工程师&#xff0c;我发现在实际业务中&#xff0c;房价预测这类结构化数据的处理能力往往被低估。这次我想分享两个Kaggle经典项目——"预测房价"和"加州房价预测"的完整实现过程&#xff0c;这不仅是深度学习的…

作者头像 李华
网站建设 2026/7/26 8:04:08

QPSO-LSTM混合模型在风电与负荷预测中的应用

1. 项目概述与背景在电力系统调度与规划中&#xff0c;风电功率和电力负荷预测一直是两大核心难题。风电作为典型的间歇性能源&#xff0c;其出力受风速、风向、温度等多重因素影响&#xff0c;呈现出显著的随机性和波动性&#xff1b;而电力负荷则随着用户行为模式、天气变化、…

作者头像 李华
网站建设 2026/7/26 7:59:20

小程序毕业设计-基于 PHP 的特色手工艺品展示售卖管理系统 非遗文创手工艺品线上展销交易小程序(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/26 7:58:55

TI MCAN模块寄存器配置与ECC内存保护实战指南

1. 从寄存器手册到实战配置&#xff1a;MCAN模块的深度解析 如果你正在开发基于TI Sitara或Hercules系列处理器的汽车电子或工业控制项目&#xff0c;那么MCAN&#xff08;Modular Controller Area Network&#xff09;模块绝对是你绕不开的核心外设。手册里那几百页的寄存器描…

作者头像 李华
网站建设 2026/7/26 7:58:10

基于Spring Boot的跨境电商多语言订单管理系统架构设计

跨境电商行业在2025年迎来爆发式增长&#xff0c;全球跨境B2C电商交易规模预计突破6.8万亿美元。面对多语言、多币种、多仓库的复杂业务场景&#xff0c;传统单体架构已难以支撑日均百万级订单处理。项目团队在某跨境电商平台改造项目中&#xff0c;采用Spring Boot微服务架构重…

作者头像 李华