如何从命令行更改文件头?

j0h*_*j0h 2 command-line software-recommendation binary

我已经看到并使用了 GUI hex-editorbless来修改位图以匹配单独的文件类型(从 bmp 到 srf)。我的问题是如何使用命令行以编程方式修改文件头。哪些程序可以让我从 shell 脚本更改文件头?

我查看了突触包管理器,但我是修改十六进制文件的新手。位图算作二进制文件吗?如果这是软件推荐请求,可接受的答案将允许我在命令行中写入、覆盖或更改特定位置(例如文件的前 16 个字节)的特定值。

des*_*ert 5

xxd是一个非常强大的命令行十六进制编辑器,它允许您使用单个命令行更改二进制文件。你可以这样使用它:

xxd -r -p -o OFFSET <(echo NEW HEX SIGNATURE) FILE  # or
echo NEW HEX SIGNATURE | xxd -r -p -o OFFSET - FILE
Run Code Online (Sandbox Code Playgroud)

让我们将01.png文件“转换”为 rar 格式(十六进制签名5261 7221 1A07 0000,偏移量01):

$ file 01.png 
01.png: PNG image data, 1280 x 1024, 8-bit/color RGB, non-interlaced
$ xxd 01.png | head -1
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
$ xxd -r -p -o 0 <(echo 5261 7221 1A07 0000) 01.png
$ file 01.png 
01.png: RAR archive data, vdb, os: MS-DOS
$ xxd 01.png | head -1
00000000: 5261 7221 1a07 0000 0000 000d 4948 4452  Rar!........IHDR
Run Code Online (Sandbox Code Playgroud)

查看man xxd其他有用的选项和许多有用的例子。

1如果偏移量是可以省略0的选项-o,我在这里包含它只是为了展示它的用法。

如果你更喜欢它,你也可以做截断dd,但这似乎不必要地复杂:

dd conv=notrunc obs=1 if=<(xxd -r -p -o 0 <(echo 5261 7221 1A07 0000)) of=01.png
Run Code Online (Sandbox Code Playgroud)

进一步阅读(除了通常的命令行帮助):