トップ «前の日記(2005-02-16) 最新 次の日記(2005-02-18)» 編集

日々の破片

著作一覧

2005-02-17

_ C++とJava

コンパイラにバグがあるならば、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研究家だけのものになってしまったのかな?

そんなことは無いだろう。でもあまり使われることはなさそうだ。

本日のツッコミ(全2件) [ツッコミを入れる]
_ kjana (2005-02-18 18:07)

livepatch とか.エンタープライズ用途向けには需要があるらしいです.<br>http://ukai.jp/Software/livepatch/

_ arton (2005-02-19 01:29)

(使うかどうかは別として)これはいいですね。どうもありがとうございます。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え