マンページの例にあるバイナリをパッチして、これが何を意味するのかを理解しようとしていますxxd
。
Patch the date in the file xxd.1
% echo "0000037: 3574 68" | xxd -r - xxd.1
% xxd -s 0x36 -l 13 -c 13 xxd.1
0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996
答え1
ファイルをパッチすることは、ファイルを修正することを意味し、これは通常、修正がマイナーであることを意味します。この使用法は、パッチが小さい修正(例:布片)の一般的な英語使用法に由来します。ファイルの場合、パッチが常に問題を解決するわけではありません。
パッチは、ファイルまたはファイルセットを変更する方法を説明する一連のガイドラインです。 Unixの世界では、パッチは通常diff
テキストファイルの変更を説明するコマンドです。この意味で、パッチはファイルの行を追加、削除、または変更する修正を記述します。このpatch
ユーティリティは、これらの指示を適用してファイルまたはファイルグループを変更します。ファイルが予想外の状態になったため、最初のパッチが原因で2番目のパッチが適用されない変更が発生する可能性があるため、同じファイルに複数のパッチをインテリジェントに適用しようとします。その操作は行ベースなので、diff
バイナリpatch
ファイルには適していません。
xxd
バイナリファイルを操作するための一般的なユーティリティです。その機能の1つはファイルを修正することです。たとえば、このコマンドは、xxd -r - xxd.1
標準入力で説明されている修正を適用することを意味します。パッチの例(修正コマンドなど)は、オフセット(10進数55など)から始まり、次の3バイトを0x35、0x74、0x68(3文字など)に置き換えることを0000037: 3574 68
意味します。0x37
5th
答え2
ファイルにパッチを適用すると、そのファイルの一部が更新されたデータで上書きされます。パッチは最後に追加のデータを追加することもできます。すべてのファイルは最終的にバイトストリームなので、テキスト、バイナリなど、あらゆる種類のファイルにパッチを適用できます。
パッチファイルは、扱うべき部分を指定します。
ソフトウェアの修正にアップデートファイルが含まれている場合、パッチはそのファイルをアップデートファイルのフルバージョンと同じように変更できます。パッチはファイル全体ではなく単なる違いなので、パッチはダウンロード時にサイズが小さく、ディスク容量と帯域幅が少なくなります。
16進エディタ(例hexer
:)で直接バイナリファイルを編集することを「手動」パッチと呼ぶこともあります。
よくわかりませんが、事前検索してみると生成可能なようですxxd
ね。xxd
ダンプあるいは、バイナリデータの16進リストであり、これらのリストを直線バイナリに変換することもできます。したがって、dump hexを使用しxxd
てvim
別のテキストエディタで編集してから、xxd -r
「hexdump形式」を使用してecho
文字列をパイプすることもできます。xxd
(他のオプションを使用すると、バイナリを変更できます。xxd
上書きまたはパッチを開始および停止する場所を指定するオプションがたくさんあるようです。)
xxd
例の最初のコマンドは、デフォルトでオフセット(「5番目」の場合はASCII)で始まるファイルのバイトを変更するように指示します。 「echo」コマンドが提供する独自の「hexdump」形式を読み取ることができます。xxd.1
0x0000037
0x35 0x74 0x68
xxd
xxd
例の2番目のコマンドは、-c
同じオフセット()で始まるファイルの13バイト数をダンプします。
このpatch
コマンドは同様の操作を実行しますが、「diff」形式のファイルが必要です。コマンドの出力を保存して、diff
2つのファイルを比較し、差分をdiff形式で表現するdiffファイルを作成できます。ページを読むと、man
パッチは直接バイナリよりもテキストファイルを変更する方が多いようです。
答え3
マイクロコントローラには、プログラム自体であるプログラムメモリを変更するプログラムがある場合があります。プログラムの実行中に「変形する」と言えます。
これはバイナリアプリケーションの変更の1つの説明にすぎません。
実際、マイクロコントローラプログラムはバイナリパッチを頻繁に使用します。あなたのプログラムは機械コードであり、通常アセンブリにプログラムされているので、組み立てられた機械コードはプログラムされた内容を非常に直接的に表現します。したがって、コードを組み合わせたら、マイクロコントローラのプログラムメモリの一部または全部にパッチを提供するだけです。