いけむランド

はてダからやってきました

Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation

以前、valgrind の論文 Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation を読んだ時のメモ。*1

  • valgrind 以外にも動的にバイナリをいじいじするような類似のツールがあるらしい。Pin とか DynamoRIO とか。
  • shadow value というのはレジスタやメモリが本来のビット以外に (ソフトウェアで) 持つ情報のことらしい。memcheck はこれに定義済みかどうかを持たせることで未初期化領域からの読み出しを検出している。shadow value を持てるような (オリジナルの情報を完全に保持する) ものを heavyweight と呼ぶらしい。(lightweight はそうでないもの?)
  • valgrind は valgrind core と tool plug-in からなる。
  • valgrind の内部でバイナリは再コンパイルされる。
    1. 機械語から IR (RISC 風) に逆アセンブル
    2. 最適化 (その 1)
    3. memcheck によるチェックコードの挿入
    4. 最適化 (その 2)
    5. IR から機械語に再アセンブル
  • valgrind core はイベント (システムコール発効とかメモリ割り当てなど) 毎に特定の関数を呼び出す仕組みになっているため、tool plug-in でそれらへのコールバックを登録しておくことで機能を拡張するようになっている。
  • heavyweight なものの中では valgrind は優れた性能を持つ。lightweight なものに比べれば、性能は劣るが、さまざまな機能は使用するに値するものである。

*1:はてなダイアリーだとキーワード経由で何かの拍子に誰かが立ち寄って、何かを指摘してくれるかもしれないので、こちらに転載してみる。