2009年11月20日金曜日

【Linkers&Loaders】2 アーキテクチャに関する問題

この本を読むと、リンカがえらい縁の下の力持ちというか、重要というか、と思える。ハードウエア + OSというものどもに対して、アプリケーションソフトウエアが動くようにしているのはリンカなんですね。

あと、本書から、ABIやリンカにおいてC++が特別なポジションにいることが読み取れる。C++もいつか覗いてみたい。


** 2 アーキテクチャに関する問題 (Architectual Issues)
- この章、パタヘネを昔読んだのでなんとか理解でき
た。パタヘネを読んでいなかったら、挫折していた
だろう。しかし、結構時間がかかった。。。
- メモはほぼ本書と同内容なので、ここには出せない。
一部補足的なことだけ投稿する。

- LinuxのABIってどこでどのように規程されているん
だろう。それとも、それがELFそのものということか?
いや、ELFはフォーマットであって、その上でさらに
運用みたいなものがあるんだろう。
- バイト境界の説明で、「Nバイトで構成されるデータ
のアドレスは、少くとも下記log 2 Nビットが0でなけ
ればならない」という趣旨のことが書かれている。こ
れ、ちゃんと考えてみる。
- まず2を底とする対数について。
log 2 1 = log 2 #b1 = 0
log 2 2 = log 2 #b10 = 1
log 2 4 = log 2 #b100 = 2
log 2 8 = log 2 #b1000 = 3
...
- 2の倍数だけ整数となる。するとここで、Nバイト
で、と言っているのは2の倍数に限っているのかな。
- さて、バイト単位でアドレスが振られているとする
と、バイト境界というのはこんな感じかな?

#x00 #b0000 0000 -2 -4 -8 -16
#x01 #b0000 0001
#x02 #b0000 0010 -2
#x03 #b0000 0011
#x04 #b0000 0100 -2 -4
#x05 #b0000 0101
#x06 #b0000 0110 -2
#x07 #b0000 0111
#x08 #b0000 1000 -2 -4 -8
#x09 #b0000 1001
#x0A #b0000 1010 -2
#x0B #b0000 1011
#x0C #b0000 1100 -2 -4
#x0D #b0000 1101
#x0E #b0000 1110 -2
#x0F #b0000 1111
#x10 #b0001 0000 -2 -4 -8 -16
#x11 #b0001 0001
...
- あ、ほんとだ。log 2 Nが共通して0になってる。


こつこつ。

0 件のコメント: