如何在 ubuntu 中自动编辑文件(需要十六进制编辑器)

如何在 ubuntu 中自动编辑文件(需要十六进制编辑器)

我有一个 android 启动映像,每次刷新内核时都需要对其进行修补。修补包括使用十六进制编辑器(我使用了 ghex)向启动映像添加 4096 个字节,这是一个非常繁琐的过程,因为您必须手动将 4096 个数字添加到文件中。因此,我想编写一个脚本来自动化该过程。

它不像简单地编辑文件,它需要十六进制编辑器。

具体来说,我想附加 0x30、0x83、0x19、0x89、0x64,然后是 0x00

答案1

这是你应该能够做的事情dd

免责声明:请记住,它dd被亲切地称为d冰岛克朗destroyer:在尝试此操作之前,请确保您对原始文件有足够的备份。

例如,我们首先创建一个最小测试文件:

$ printf 'hello' > testfile
$ xxd testfile
00000000: 6865 6c6c 6f                             hello

当然,这只是 5 个字节 - 实际上它将是您的图像文件。

现在我们要写入更多字节,0x30、0x83、0x19、0x89、0x64,并用空字节 0x00 填充,直到块大小达到(比如说)128 字节,然后将其附加到文件中。这只是为了说明- 您实际上将ibs=4096在您的案例中使用。

$ printf '\x30\x83\x19\x89\x64' | dd of=testfile ibs=128 conv=sync,notrunc oflag=append
0+1 records in
0+1 records out
128 bytes copied, 0.000500623 s, 256 kB/s

我们来检查一下结果:

$ xxd testfile
00000000: 6865 6c6c 6f30 8319 8964 0000 0000 0000  hello0...d......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000080: 0000 0000 00                             .....

这是原始的 5 个字节testfile,后面跟着填充到 128 字节块大小的新字节序列,总共 133 个字节(十六进制偏移量00000085)。

答案2

两者headtail可以通过他们的--bytes选择对您的文件进行手术。

# assume: boot.img is the to-be-modified file, my4096 is your 4096 bytes,
# and you want to replace bytes 4097-8192 of the file. newboot.img is the result.
( \
  head --bytes=4096 boot.img ;\
  cat my4096;\
  tail --bytes=+8193 boot.img \
) >newboot.img

或者,您可以使用ed, 或sed, 或 ...

相关内容