今日はYLUGのカーネル読書会に参加した。
ここ数回、こまめに参加しているのであるが、毎回非常に高度な話を
してくれるので頭がウニになって帰ってくる。
ただ、身の程を考えずに遥かににハイレベルな空間に身を投じることによって
触発されることも多いので、場違いな感じがしなくも無いと思わなくも無いが
頑張って参加してみるつもりである。
という事で今日のまとめを理解したなりにまとめておく。
今日のお題はバイナリパッチャ。
動的にバイナリにパッチ当てをする仕組みである。
基本的には実行されている(メモリに乗っている)プログラムに対し動的に
パッチ当てを行いバグフィックスや新機能の追加を行う仕組みである。
方法論としては関数を差し替える場合(※1)、新しい関数を置く場所をアロケートし
従来の関数の先頭をJMP命令で書き換えて新しい関数の場所まで飛ばしリターン時に
元の関数の元に戻ってくるように戻り番地を整えるとの事。
※1差し替えは関数ごととの事。
端的にはこうだよな。たぶん。
ポイントというか理解に必要な単語としてはコールスタックとかユーザランドとかptraceとかかと。
JMP命令とかINT3命令とかはもうアッセンブラの世界だとか思わなくも無く。
インテルのパイプラインをフラッシュしておかないと安全ではないとか
そんな質問というか意見というか出てましたが追いつけてない。
一つ一つ噛み砕いていこう。
I came across your blog on Technorati. Nice site layout. I will stop by and read more soon.
Mike Harmon