Linux 是否用0xFF替换部分文件?

Linux 是否用0xFF替换部分文件?,linux,bash,shell,file,binary,Linux,Bash,Shell,File,Binary,我想修改一个文件,使从位置0x3000到0xDC000的每个字节都被替换为0xFF,其他所有内容都不应修改 如何使用标准的Linux工具来实现这一点?这只是一点小小的改进(在回答的最后解释) 在您的情况下,您可以使用上面的函数 overwrite yourFile 0x3000 0xDC000 0xFF 起始字节和结束字节都是基于0的。开始是包含的,结束是独占的。例如: $ printf 00000 > file $ overwrite file 1 3 0x57 $ hexdump -

我想修改一个文件,使从位置
0x3000
0xDC000
的每个字节都被替换为
0xFF
,其他所有内容都不应修改

如何使用标准的Linux工具来实现这一点?

这只是一点小小的改进(在回答的最后解释)

在您的情况下,您可以使用上面的函数

overwrite yourFile 0x3000 0xDC000 0xFF
起始字节和结束字节都是基于0的。开始是包含的,结束是独占的。例如:

$ printf 00000 > file
$ overwrite file 1 3 0x57
$ hexdump -C file
00000000  30 57 57 30 30   |0WW00|
00000005
所做的改进:

  • 修复了错误的
    count=…
    并解释了开始和结束的解释

  • 允许填充空字节。
    如果要写入空字节
    0x00
    ,则不能使用
    yes$'\x00'
    。空字节表示
    yes
    的参数字符串的结尾,使得调用相当于
    yes'
    。由于
    yes'|tr-d\\n
    不产生任何输出
    dd
    将无限期等待。
    此答案中显示的命令允许您使用任何字节填充区域(从0x00到0xFF中选择一个)

这方面几乎没有改进(在本答案末尾解释)

在您的情况下,您可以使用上面的函数

overwrite yourFile 0x3000 0xDC000 0xFF
起始字节和结束字节都是基于0的。开始是包含的,结束是独占的。例如:

$ printf 00000 > file
$ overwrite file 1 3 0x57
$ hexdump -C file
00000000  30 57 57 30 30   |0WW00|
00000005
所做的改进:

  • 修复了错误的
    count=…
    并解释了开始和结束的解释

  • 允许填充空字节。
    如果要写入空字节
    0x00
    ,则不能使用
    yes$'\x00'
    。空字节表示
    yes
    的参数字符串的结尾,使得调用相当于
    yes'
    。由于
    yes'|tr-d\\n
    不产生任何输出
    dd
    将无限期等待。
    此答案中显示的命令允许您使用任何字节填充区域(从0x00到0xFF中选择一个)


如果您选择使用
Perl
,请尝试以下操作:

perl -e '
$start = 0x3000;                        # start position to overwrite
$end = 0xDC000;                         # end position to overwrite
$file = "file";                         # filename to modify (replace with your filename)

open(FH, "+< $file") or die "$file";    # open the file "$file" to both read & write with the filehandle "FH"
seek(FH, $start, 0);                    # jump to the start position
for ($i = $start; $i < $end; $i++) {    # loop over the overwrite area
    print FH "\xFF";                    # replace the byte with 0xFF
}
close(FH);
'
perl-e'
$start=0x3000;#要覆盖的起始位置
$end=0xDC000;#要覆盖的结束位置
$file=“file”#要修改的文件名(替换为您的文件名)
打开(FH,“+<$file”)或死“$file”#使用文件句柄“FH”打开文件“$file”进行读写操作
搜索(FH,$start,0);#跳到起始位置
对于($i=$start;$i<$end;$i++){#在覆盖区域上循环
打印FH“\xFF”#将字节替换为0xFF
}
关闭(FH);
'

如果您选择
Perl
,请尝试以下操作:

perl -e '
$start = 0x3000;                        # start position to overwrite
$end = 0xDC000;                         # end position to overwrite
$file = "file";                         # filename to modify (replace with your filename)

open(FH, "+< $file") or die "$file";    # open the file "$file" to both read & write with the filehandle "FH"
seek(FH, $start, 0);                    # jump to the start position
for ($i = $start; $i < $end; $i++) {    # loop over the overwrite area
    print FH "\xFF";                    # replace the byte with 0xFF
}
close(FH);
'
perl-e'
$start=0x3000;#要覆盖的起始位置
$end=0xDC000;#要覆盖的结束位置
$file=“file”#要修改的文件名(替换为您的文件名)
打开(FH,“+<$file”)或死“$file”#使用文件句柄“FH”打开文件“$file”进行读写操作
搜索(FH,$start,0);#跳到起始位置
对于($i=$start;$i<$end;$i++){#在覆盖区域上循环
打印FH“\xFF”#将字节替换为0xFF
}
关闭(FH);
'

欢迎来到SO,在SO上,我们鼓励人们增加他们为解决自己的问题所付出的努力,所以请在您的问题中添加同样的努力,然后让我们知道。
yes$'\xFF'| tr-d'\n'| dd conv=notrunc bs=1c seek=$(0x3000-1))count=$(0xDC000))of=FILE
是Perl“标准”吗?蟒蛇
xxd
?欢迎来到SO,在此基础上,我们鼓励人们增加他们为解决自己的问题所付出的努力,所以请在您的问题中添加同样的努力,然后让我们知道。
yes$'\xFF'| tr-d'\n'| dd conv=notrunc bs=1c seek=$(0x3000-1))count=$(0xDC000))of=FILE
Perl是“标准”吗?蟒蛇<代码>xxd?干得好。在macOS上,使用
dd conv=notrunc bs=1…
,因为不接受
c
。@MarkSetchell感谢您的提示。我刚刚从jhnc复制了
c
。现在它被删除了,因为它清楚地表明,
bs
是以字节为单位指定的。这个问题对于基于0或1的位置和(s,e)/[s,e)/[s,e]在macOS上,使用
dd conv=notrunc bs=1…
,因为
c
是不被接受的。@MarkSetchell谢谢你的提示。我刚刚从jhnc复制了
c
。它现在被删除了,因为
bs
是以字节为单位指定的。为我辩护,这个问题指定了linux:-)很好的概括。关于基于0或1的位置和(s,e)/[s,e)/[s,e]的问题是不明确的。计数很好。