« January 2006 | Main | March 2006 »

February 10, 2006

メモ

超ローカルで意味不明なメモ。

ptrace対象の子プロセスがシグナルを食らったときにはptraceしている親に対して通知が行くが、親がその通知を受け取った時点で、子プロセスのスタックにはsignal frameがセットアップされているようである(arch/i386/kernel/signal.c:setup_frameもしくはsetup_rtframe)。ということでSIGSEGVを受け取った時点でespからごにょごにょすればsigcontextにアクセスできるか。

こんなことしてないでさっさとスライド直しなさい。

| | Comments (0) | TrackBack (0)

卒論提出

すっかり書き忘れていた。2月7日に卒論提出。結局6368 words/27 pages。「まあ6000ワードくらいかな」と思っていたので目標は達成。英語を書くのは特に苦にならなかったが、とにかくひどい内容に自分でも閉口した。話を広げすぎずに1つ1つをきちんと完成させるべきだった。卒論発表会では間違いなく叩かれまくるだろうが、まあ自分のせいだし、今後の成長の糧として生かせればそれでよいと思っている。

さて、卒論は提出したものの卒業はできるのかな?連続系アルゴリズム……

| | Comments (0) | TrackBack (0)

February 06, 2006

prelink禁止

昨日の「マシンごとにライブラリのバイナリが異なる」件だが、偉大なる先輩が解析してくださった結果、prelinkのせいであるということがわかった。ライブラリの配置アドレスを決めうちしてどっかのテーブルを書き換えると同時に、(-rオプションがついていると)配置アドレスをランダムに決定するらしい。objdump -dすると固定されたアドレスがわかる。バイナリが異なっていたのはこのせい。乗っ取り系コードへの対策のためだろうが、マシンごとにライブラリのバイナリが異なるのは大変困るので、実験用マシンではprelinkは使用しないことになった。

ELFの動的リンクとか、まだまだわかってないことも多いなぁ。再配置の仕組みとか。Linkers and Loadersをちゃんと読むか。

| | Comments (0) | TrackBack (0)

February 05, 2006

究極のprintfデバッグ

コードの任意の箇所に画面出力を入れて値を出力させたり、そもそもそこに到達したことを示すメッセージを出力させたりする、いわゆる"printfデバッグ"は多くのプログラマが日常的に実践していることだろう。俺などは無精なので未だにgdbの使い方を覚えておらず、printfデバッグに頼り切りだったりする。

さて、システム系のあやしいコードを書いていると、時にコードの状態がめちゃくちゃになって、printfデバッグすら怪しくなることがある。ライブラリの関数を呼ぼうとするとクラッシュするといった具合だ。そんなときに使えるのがint3デバッグ。「果たしてどこまでは正常に動いているのか」を知りたいときに、「ここまでは来てるんじゃないかな?」という箇所に

__asm__ __volatile__("int3");
と書く。この命令はプロセッサにデバッグ例外を生じさせ、通常はそれがOSによって捕捉され、シグナルの形でプロセスに送られてくる。それまでsignal 11(SIGSEGV)で落ちていたのがこのint3によってsignal 5(SIGTRAP)に変わったら、少なくともそこまではちゃんと実行されたということがわかる。このようにしてクラッシュしている範囲を絞り込んでいくことができる。

以上、x86/Linux限定の超どうでもいい話でした。でも同様のことはどんなOS/アーキテクチャでも適宜値を読み替えれば使えるはず。

| | Comments (0) | TrackBack (0)

ファイルが違う…

マシンによって/lib/tls/libc-2.3.4.soのmd5 checksumが異なるのはなんで?

同じようなマシンの組に対していくつか調べたところ、いくつかパターンがあって、
1.タイムスタンプは一緒だがそもそもファイルサイズが違う
2.ファイルサイズも一致するがmd5sumはやっぱり一致しない
の2通りがあった。本当に欲しい組み合わせであるところの、md5まで含めて一致する組は発見できず。同じディストリビューションを同じようにインストールして同じようにアップデートしてるはずのマシンなのに、なんでだろう。大変奇妙だ。

調べ出すと眠れなくなりそうなので、卒論を書き終えた後の課題ということにしておく。2つのマシン間でライブラリが厳密に一致することを前提にしてるから、一致してないとすると困っちゃうなぁ。

| | Comments (1) | TrackBack (1)

« January 2006 | Main | March 2006 »