是否有任何命令可以在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脚本中的任何命令?
由于
答案 0 :(得分:2)
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字符串可以包含字符\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,这允许你对任何文件做任何事情,只要你知道你在做什么。