バイナリーパッチを考えてみる

ささださんの記事、
http://www.atdot.net/~ko1/diary/200807.html#d17
ってwrite barrierに使うのでは?って今更気づきました。
そうだったら、パッチを当てたソースコードは残っていなくてもいいからPurifyのようにバイナリで書き込み命令にパッチを当てたらどうだろうと思いました。でも、そうすると移植性は0になってしまいます。

こんな感じだとどうでしょう?

  • -Sオプションを使ってアセンブリコードまででストップ
  • 以下のようなフィルタ(多分Ruby製)をかます
    1. ストア命令の後に書き込みアドレスのスタックPUSHとwrite barrierのジャンプ命令を挿入
    2. ただし、書き込み先がベースポインタやスタックポインタ+オフセット である場合は挿入しない
    3. CPU・対象アセンブラ毎に対象ニモニックや挿入対象オペランドのパターンを用意する

・・・、やっぱりだめだろうなー。