如何在shell脚本中修改二进制文件?

时间:2016-07-13 01:49:43

标签: linux shell

是否有任何命令可以在shell中修改二进制文件?

首先我创建了一个包含所有0xff值的文件

 $ dd if=/dev/zero ibs=1K count=1 | tr "\000" "\377" > ./Test.img
 $ hexdump Test.img
   0000000 ffff ffff ffff ffff ffff ffff ffff ffff
   *
   0000400

然后我想改变像

这样的字节值
   0000000 aaaa ffff bbbb ffff cccc ffff ffff ffff
   *
   0000400

我该怎么改变?或shell脚本中的任何命令?

由于

2 个答案:

答案 0 :(得分:2)

使用python

Python被设计为二进制清理,所以这里有一种方法:

$ python -c 'open("New.img", "wb").write( "\xaa\xaa\xff\xff\xbb\xbb\xff\xff\xcc\xcc" + open("Test.img", "rb").read()[10:] )'

以下是生成的文件:

$ hexdump New.img
0000000 aaaa ffff bbbb ffff cccc ffff ffff ffff
0000010 ffff ffff ffff ffff ffff ffff ffff ffff
*
0000400

使用shell

shell 二进制清理。例如,没有shell字符串可以包含字符\x00。因此,任何使用shell的方法都可能会出现令人不快的意外情况。但是,如果必须,请尝试:

LC_ALL=C; { printf "%s" $'\xaa\xaa\xff\xff\xbb\xbb\xff\xff\xcc\xcc'; tail -c+11 New.img; } >New2.img

答案 1 :(得分:1)

你可以只是vim -b bin-file-name,这将以二进制模式启动vim,这允许你对任何文件做任何事情,只要你知道你在做什么。