xxd
是一个 十六进制转储(hex dump)工具,通常用于将二进制文件转换为十六进制格式,或者反向转换(十六进制→二进制)。它是 vim
的一部分,但在大多数 Linux 系统(如 Ubuntu)中可以直接使用。
1. 安装 xxd
如果 xxd
未安装,可以通过以下方式安装:
sudo apt update
sudo apt install xxd # 或安装 vim-common(包含 xxd)
2. 基本用法
(1) 查看文件的十六进制格式
xxd <文件名>
示例:
echo "Hello" > test.txt
xxd test.txt
输出:
00000000: 4865 6c6c 6f0a Hello.
- 左边:字节偏移量(
00000000
表示起始位置)。 - 中间:十六进制数据(
48 65 6c 6c 6f 0a
是H e l l o \n
的十六进制)。 - 右边:ASCII 可打印字符(
.
表示不可见字符)。
(2) 仅显示十六进制(不显示 ASCII)
xxd -p <文件名>
示例:
xxd -p test.txt
输出:
48656c6c6f0a
(3) 从十六进制还原为二进制
xxd -r <十六进制文件> <输出文件>
示例:
echo "48656c6c6f0a" > hex.txt
xxd -r -p hex.txt > output.txt # -p 表示纯十六进制模式
cat output.txt
输出:
Hello
-r
:反向模式(十六进制→二进制)。-p
:处理纯十六进制字符串(无偏移量或 ASCII 部分)。
3. 常见用途
(1) 发送十六进制数据(结合 nc
)
echo "48656c6c6f" | xxd -r -p | nc <IP> <端口>
48656c6c6f
="Hello"
的十六进制。xxd -r -p
将其转为二进制,然后nc
发送。
(2) 查看二进制文件的十六进制
xxd /bin/ls | less # 查看 ls 命令的二进制结构
(3) 修改二进制文件
- 生成十六进制文件:
xxd original.bin > hex_edit.txt
- 用文本编辑器修改
hex_edit.txt
。 - 转换回二进制:
xxd -r hex_edit.txt > modified.bin
4. 高级选项
选项 | 说明 |
---|---|
-g <字节数> | 每组显示的字节数(默认 2) |
-l <长度> | 只处理前 N 个字节 |
-s <偏移量> | 从指定偏移量开始 |
-u | 使用大写十六进制字母 |
-c <列数> | 每行显示的字节数(默认 16) |
示例(每行 8 字节,大写十六进制):
xxd -u -c 8 test.txt
5. 典型示例
(1) 查看 ELF
文件头
xxd /bin/ls | head -n 10
输出:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 9850 0000 0000 0000 ..>......P......
...
7f 45 4c 46
=\x7fELF
(ELF 文件魔数)。
(2) 生成随机十六进制数据
head -c 16 /dev/urandom | xxd -p
输出:
a1b2c3d4e5f67890
6. 总结
- 查看十六进制:
xxd <文件>
- 纯十六进制模式:
xxd -p <文件>
- 十六进制→二进制:
xxd -r -p <十六进制文件> > <输出文件>
- 网络调试:
echo "414243" | xxd -r -p | nc <IP> <端口>
- 二进制分析:
xxd /bin/ls | less
xxd
是处理二进制和十六进制数据的利器,适用于逆向工程、网络调试、文件分析等场景! 🔍