如何使用 Bash 创建二进制文件?

问题描述 投票:0回答:5

如何在 Bash 中创建包含后续二进制值的二进制文件?

喜欢:

hexdump testfile

0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e
0000010 1110 1312 1514 1716 1918 1b1a 1d1c 1f1e
0000020 2120 2322 2524 2726 2928 2b2a 2d2c 2f2e
0000030 ....

在 C 语言中,我这样做:

fd = open("testfile", O_RDWR | O_CREAT);
for (i=0; i< CONTENT_SIZE; i++)
{
    testBufOut[i] = i;
}

num_bytes_written = write(fd, testBufOut, CONTENT_SIZE);
close (fd);

这就是我想要的:

#! /bin/bash
i=0
while [ $i -lt 256 ]; do
    h=$(printf "%.2X\n" $i)
    echo "$h"| xxd -r -p
    i=$((i-1))
done
bash binaryfiles hexdump
5个回答
21
投票

只有一个字节不能作为 Bash 命令行中的参数传递:0

对于任何其他值,您可以直接重定向它。很安全。

echo -n $'\x01' > binary.dat
echo -n $'\x02' >> binary.dat
...

对于值0,还有另一种方式将其输出到文件中

dd if=/dev/zero of=binary.dat bs=1c count=1

要将其附加到文件中,请使用

dd if=/dev/zero oflag=append conv=notrunc of=binary.dat bs=1c count=1

11
投票

看看xxd

xxd:创建给定文件或标准输入的十六进制转储。它可以 还 将十六进制转储转换回其原始二进制形式。


2
投票

如果您不介意不使用现有命令并希望在文本文件中描述数据,则可以使用 binmake。这是一个 C++ 程序,您可以像下面这样编译和使用:

首先获取并编译binmake(二进制文件将位于

bin/
中):

git clone https://github.com/dadadel/binmake
cd binmake
make

创建文本文件

file.txt
:

big-endian
00010203
04050607
# Separated bytes not concerned by endianness
08 09 0a 0b 0c 0d 0e 0f

生成二进制文件

file.bin
:

./binmake file.txt file.bin
hexdump file.bin

0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e
0000008

注意:您还可以将其与标准输入标准输出一起使用。


1
投票

使用以下命令,

i=0; while [ $i -lt 256 ]; do echo -en '\x'$(printf "%0x" $i)''  >> binary.dat; i=$((i+1));  done

0
投票

在 Unix 和类 Unix 系统中,开发人员忘记了以前的竞争系统中内置的这种功能(通过 ROM 中的监控程序)。

在该系列系统中,如果不先传输程序,就无法从键盘输入创建二进制文件。

这是因为在当时(1970 年代中期),这条路径与竞争路径、用户可访问(解释器)和用户可用(内置)不同。

因此,编译器是在这些系统上创建二进制文件所必需的依赖项,尽管 ROM 中只需要很少的代码字节即可允许用户在任何计算机上执行此操作。 (今天,这主要指嵌入式系统。)

© www.soinside.com 2019 - 2024. All rights reserved.