brly.github.io
Reading
01 Nov 2018

リンカ・ローダの本を読む

同じ会社のエンジニアさんが退職なさる際の荷物整理で、いらない本としてリンカ・ローダの本をもらったので読んだ。

1冊目を読み終わって、2冊目の Linkers & Loaders をぱらぱらし始めたところ。 読了してる人いわく、1冊目は elf に焦点を絞っているので実用的だが、2冊目は COFF やら、いにしえのすでに 使われてないものにすらフォーカスを当てているので、いまさらだよな、と言っていた。

ローダといえば、最近は 30日 OS を読み終わって, mit の教育用資料の xv6 の教科書的なやつを一通り読んだので、あー、となったけど そういえばローダをする exec のやつは若干流し読みしていたので、おさらいもかねることができて、よい本だった。

実際に簡易的なリンカ、ローダの作成まで行なっているので、最適化されてないにしろ、どういうものなのかを理解することはできた。 readelf, objdump などでちらちら見かけるたくさんの section の意味 (.text, .data, .bss, .rel.XXXX, .plt, .got, .symtab, .dynsym, .symstr …) とか, リンカがすること, ローダがすること, リンカスクリプトとは, 動的リンク, 再配置, PIC, … などなど オブジェクトファイルから executable にしてロード/実行されるまでの概ねのことが理解できるようになった。

で、読了後に思ったのは、オブジェクトファイルはすでに与えられているもの、としているけど じゃあ elf 形式のオブジェクトファイルを吐くためのコンパイラは、本当はどうやっているのか? という疑問に行き着くので、結局コンパイラの本が読みたくなる、ということだった。

で、ドラゴンブックとか検索してみたら、高い…。近くの図書館にないかな、と思って探して見たけど、ない。