我正在尝试使用 hexedit 软件将数据附加到 ubuntu 中的二进制文件。在 ubuntu 中,如果不覆盖文件中已有的数据,是否不可能将数据附加到二进制文件?
答案1
如果您保存任何更改,hexedit 显然会覆盖整个文件;即使您只是附加数据。
输入符号(例如“<” ">”)可能会有问题,因为它们代表十六进制编辑命令。要将它们作为文件内容输入,请使用“tab”键切换到十六进制编辑并输入它们的十六进制表示形式(相应地为 3c 和 3e)。由于这些并不是唯一这样的键,我建议您在使用十六进制编辑器时随时准备好 ASCII 表。
许多 Linux 管理员在面对二进制文件中的位操作时,都会使用古老的“dd”。以下是如何将 80 字节文件中的随机数的 4 字节部分替换为文件中 15 个字节位置处的零的示例:
dd if=/dev/urandom of=file.dat bs=1 count=80 #create primary file
dd if=/dev/zero of=block.dat bs=1 count=4 #create replacement data
dd if=./block.dat of=./file.dat bs=1 count=4 seek=15 conv=notrunc #replace data
使用以下方法将数据“插入”到二进制文件中日并不完全实用,因为它涉及重新定位二进制文件的后半部分;这是一种自我覆盖的演变。
但是,您可以构建第三个文件,该文件是数据文件前半部分、插入的数据和数据文件的后半部分的组合,并产生净效果:
# Define where the insertion will take place; the 25th byte
insertPoint=25
# Create new file with the first 24 bytes of data file
dd if=file.dat bs=1 count=$(expr $insertPoint - 1) > file2.dat
# Append insert data
cat insert.dat >> file2.dat
# Append rest of data file
dd if=file.dat bs=1 skip=$(expr $insertPoint - 1) >> file2.dat
需要指出的是,二进制文件之所以如此,通常是因为它们被服务或应用程序使用。因此,必须小心谨慎,确保您没有更改其他进程正在使用的文件。