在某些情况下,可能会用到全为某个值的 bin 文件,可使用 dd 命令配合 /dev/zero
这个特殊的文件设备,来生成全为 0x00 的 bin 文件。然后再使用 tr
命令,替换0x00 为 特定的值,即可生成全是某个值的bin文件。
命令说明:
1.生成全是0的bin文件
制作全是0的bin文件,文件大小为(bs * count):
# 生成512byte全为0的bin文件:
dd if=/dev/zero of=all_0x00.bin bs=1 count=512
# 生成5K全为0的bin文件:
dd if=/dev/zero of=all_0x00.bin bs=1K count=5
# 生成5M全为0的bin文件:
dd if=/dev/zero of=all_0x00.bin bs=1M count=5
2.生成全是FF的bin文件
使用 tr 命令,替换0x00 为 0xFF,命令如下所示:
#生成512byte的全FF的bin文件
dd if=/dev/zero bs=1 count=512 | tr "\000" "\377" > all_0xff.bin
#生成5K的全FF的bin文件
dd if=/dev/zero bs=1K count=5 | tr "\000" "\377" > all_0xff.bin
#生成5M的全FF的bin文件
dd if=/dev/zero bs=1M count=5 | tr "\000" "\377" > all_0xff.bin
其中 \000,\377 为八进制数,即分别为0x00,0xFF。这里使用tr
命令将0x00替换为0xff。
3.合并bin文件
cat all_0x00.bin all_0xff.bin > all.bin
4.截取bin文件
从bin文件的(bs * skip)位置,截取(bs * count)长度的bin文件:
# 从输入文件头部偏移(1 * 0)开始,截取(1 * 512)成单独文件
dd if=all.bin bs=1 count=512 skip=0 of=0x00_0xff.bin
# 从输入文件头部偏移(1 * 32)byte开始,截取(1 * 512)成单独文件
dd if=all.bin bs=1 count=512 skip=32 of=0x00_0xff.bin
# 从输入文件头部偏移(1K * 2)byte开始,截取(1K * 512)成单独文件
dd if=all.bin bs=1K count=512 skip=2 of=0x00_0xff.bin
# 从输入文件头部偏移(1M * 2)byte开始,截取(1M * 3)成单独文件
dd if=all.bin bs=1M count=3 skip=2 of=0x00_0xff.bin
5.向bin文件的指定位置写入内容
向bin文件的(bs * seek)位置写入指定的十六进制数,文件大小保持不变:
# 将0x11 0x22写入bin文件的开头,bin文件大小不变
echo -e -n "\x11\x22" | dd bs=1 seek=0 conv=notrunc of=all_0xff.bin
# 将0x33 0x44写入bin文件的(1 * 256 = 256)位置,bin文件大小不变
echo -e -n "\x33\x44" | dd bs=1 seek=256 conv=notrunc of=all_0xff.bin
# 将0x55 0x66写入bin文件的(1K * 1 = 0x400)位置,bin文件大小不变
echo -e -n "\x55\x66" | dd bs=1K seek=1 conv=notrunc of=all_0xff.bin