0xFFを持つファイルの一部を置き換えますか?

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からいずれかを選択)と地域を埋めることができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=12720&siteId=1