Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在shell脚本中修改二进制文件?_Linux_Shell - Fatal编程技术网

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

Linux 如何在shell脚本中修改二进制文件?,linux,shell,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 c

是否有任何命令可以修改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脚本中的任何命令

感谢使用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字符串都不能包含字符
\x00
。因此,任何使用shell的方法都可能会遇到令人不快的意外。但是,如果必须这样做,请尝试:

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

您可以只使用vim-b bin文件名,这将以二进制模式启动vim,这允许您对任何文件执行任何操作,只要您知道自己在做什么。

谢谢,但我不想使用shellpython@CKvir好啊添加了Shell方法,但请注意问题是固有的。如果我想更改第二行或其他行,我该怎么做?0000010 ffff ffff ffff ffff ffff AAAA ffff。。。。。。0000030 ffff ffff ffff ffff BBBB ffff ffff FFFFFFFFFFFFFFAND还有一些问题,使用python或shell文件大小会改变,我不希望文件大小改变,其他二进制值仍然保持0xff,这可能吗?在我的测试中,两种方法的文件大小都没有改变。请检查