补充说明
xxd 是 Vim 附带的十六进制转储工具,既能以十六进制加 ASCII 的形式显示文件,也能把十六进制文本还原为二进制。它常用于检查文件头、调试协议数据、生成 C 数组以及修补二进制文件。
默认输出每行 16 字节,左侧是偏移量,中间是十六进制字节,右侧是可打印字符。使用 -p 可输出连续的纯十六进制,适合与其他工具组合;-r 执行反向转换。-i 直接生成 C 语言的数组定义。
xxd 不是加密或校验工具,转储结果只是数据的表示。处理大文件时应使用 -l 限制长度或配合 -s 跳转,避免一次输出过多内容。反向转换要求输入格式与选项匹配,尤其是 -p 与普通格式不能混用。
语法
xxd [选项] [输入文件 [输出文件]]
选项
-l 长度:只转储指定字节数。-s 偏移:从指定偏移开始,支持0x十六进制和负数。-c 列数:每行显示的字节数,默认 16。-g 分组:每多少个字节插入一个空格。-p:输出纯十六进制,不带偏移和 ASCII。-i:输出 C 语言数组形式。-r:反向转换,把十六进制还原为二进制。-b:以二进制位显示。-u:使用大写十六进制字母。
实例
# 查看文件前 64 字节
xxd -l 64 firmware.bin
# 从偏移 0x100 开始查看
xxd -s 0x100 -l 128 firmware.bin
# 输出纯十六进制,去掉空白后便于比较
xxd -p payload.bin | tr -d '\n'
# 把十六进制文本还原为二进制
xxd -r -p payload.hex payload.bin
# 生成 C 数组
xxd -i logo.png > logo.h
# 查看 ELF 文件头魔数
xxd -l 16 /bin/ls