MogensJ:
私は場所からのすべてのバイトをして、ファイルを変更する0x3000
ために0xDC000
置き換えられ0xFF
、他のすべてが無修正でなければなりません。
標準的なLinuxツールで、これを達成するには?
Socowi:
これは、jhncの答え(この回答の最後で説明)少し改良を加えました。jhncが答えに自分のコメントをオンにすることを決定した場合の代わりに/あまりにも自分の答えをupvoteしてください。
#! /bin/bash
overwrite() {
file="$1"; from="$2"; to="$3"; with="$4"
yes '' | tr \\n "\\$(printf %o "$with")" |
dd conv=notrunc bs=1 seek="$((from))" count="$((to-from))" of="$file"
}
あなたのケースでは、あなたのような上からの関数を使用します
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=...
および開始と終了の解釈を説明しました。NULLバイトを充填することができます。
あなたがnullを書きたい場合はバイトを0x00
使用することはできませんyes $'\x00'
。ヌル・バイトは年末相当するであろうyes
と、コール同等を作るの引数文字列をyes ''
。以来yes '' | tr -d \\n
作り出す何も出力はdd
無期限に待機しません。
この回答に提示コマンドを使用すると、任意のバイト(0xFFのには0x00からいずれかを選択)と地域を埋めることができます。