著作一覧 |
コンパイラにバグがあるならば、C++のほうが良い言語と言える。アセンブラリスト(アセンブリリストのような気もする。アセンブラが出力したリストか、アセンブリのリストかどっちだろう? Googleでカタカナで検索すると3:1くらいでアセンブラリストだな)を見れば一目瞭然だし。
でも、それは本末転倒な理由だな。
patchと書かれたファイルを見たらdiffが入っていて面食らった。そしてpatchというコマンドを見つけて非常に不思議に思った。
patchという言葉が知っていたものと意味が異なったからだ。
Cで書いてもしょうがないが、最初に覚えたpatchはこんな感じだ。
static unsigned char patch[512]; ...で、例えば
void foo(int x) { printf("%d\n", x * 2); }という関数fooにパッチを当てる(たとえばxを3倍する)とすると、まずpatchに相当するアドレスを探し、以下のコードをアセンブルしたものを直接書き込む。
printf("%d\n", x * 3); ret // なんてCには無いけど次にfooの先頭アドレスを探し、以下のコードをアセンブルした結果を書き込む。
goto patch;
というように、メモリーイメージを直接いじくるのが最初に知ったpatchだったからだ。ところがある時点でpatchというのはソースファイルをいじくるものを指すことが(コマンドになってるくらいだし)普通らしいと気付いたのであった。
そう言えば/dev/kmemが大好きな人もいたな。
今ではこういう技術はexploit研究家だけのものになってしまったのかな?
そんなことは無いだろう。でもあまり使われることはなさそうだ。
ジェズイットを見習え |
livepatch とか.エンタープライズ用途向けには需要があるらしいです.<br>http://ukai.jp/Software/livepatch/
(使うかどうかは別として)これはいいですね。どうもありがとうございます。