diff&patchコマンドによるバイナリ編集

皆さん元気に開発してますか?

ボクは最近なぜか6502のコードに親しみが生まれてしまっています。

ボクがチップチューンを作っているとご存知の方なら、6502に縁が出来るのは頷けることでしょう。
まあ、ボク自身が驚いているんですけどね。
あまり特定の環境に拘りすぎるのは木を見て森を見ずなのではないかと危惧する寄りの姿勢でいたハズなのに、vimのバイナリモードをしょっちゅう開いて直接バイナリコードをいじりまくり。

そんなことをやっていたら、とうとう自分の成果をパッチ化しておきたくなりました。 diffコマンドとpatchコマンドでも自分の望むことは可能だったので、備忘録。

diffのバイナリモード

パッチのコンテクストはとりあえずunifiedで。
通常と違うのは-a --binaryの部分くらいでしょうか。

diff -u -a --binary file_before.bin file_after.bin > filediff.patch

patchのバイナリモード

通常と違うのは--binaryの部分だけ。一緒じゃないんだ……

patch --binary [-R] < filediff.patch

何でこれをまとめたの

元々今回ボクがやりたかったのは、半分はips形式のパッチ適用をdiffとpatchに置き換えるだけ。
ips形式のパッチなんてボクからすると汎用性が低くて仕方ないので……

もう半分は、今やっているゲームに関連しています。
件のパッチを応用してごにょごにょすることで音声面の根深い問題を一つ解決し、制作側が想定したであろうクオリティを手元で再現できるようになりました。
割と気になる人は気になるパッチなんじゃなかろうかと思いつつ、公開するならどこでしようか悩みどころ。

Written on July 30, 2023