ToDo:
arton さんのところで Y-00 てのがあるのかーと知ったので
http://www.artonx.org/diary/20140430.html#p01
買う前はなんかうさんくさいなぁ…と思ってたんだけど、読んだ後も同様な印象だった。
というか終始 BB84 を攻撃してて、肝心の Y-00 の中身についてほとんど説明してないような…
(00:32)
http://www.amazon.co.jp/dp/4789838072
主に人に勧めるという観点で、Linkers & Loaders は教科書的にいい本ではあるけど、 GNU とか ELF に寄せたもうちょい実践的な本無いかなぁと思ったらあったので買ってみた。
ざーとながめたかんじ、なかなか勧められそうな感じで良い、と思う。ただまあそれなりに気になる点が。
P.97 ライブラリ・アーカイブどうしの場合には、先に見つかったほうのシンボルが優先されます
これはまー書いた人はわかってそうだけど、ダウトだよな。
$ cat foo.c void func() {} void foo() {} $ gcc -c foo.c && ar crus libfoo.a foo.o $ cat bar.c void func() {} void bar() {} $ gcc -c bar.c && ar crus libbar.a bar.o $ gcc main.c -L. -lfoo -lbar
とか、この記述だとエラーにならなさそうに見えるけど、エラーになる。
P.158 同じような .a の恐怖的な話。 -u も紹介してあげるとやさしい気がする
8.4 章、簡易ローダの作成。ここから先、なんで memcpy でロードするんだろう…って感じ。わざわざ ELF 書き換えツールを作って RWX にするとかしてるけど、たぶん本の記述量的にも実践的にも、ローダをリンクする時に 0x8048000 付近を避けて、ローダ内では mmap するのが良いと思う。ELF 書き換えツールもリンカスクリプトもいらなくて、ローダをリンクする時に
-static -Wl,-Ttext-segment=0x50000000
とかすればいいだけでないかなと。そのへんわかってないとは思えないんで、ちょっと意図がつかみかねるかんじ。 -Ttext-segment は最近だった気もするんで、まぁリンカスクリプトいじりは必要かもしれないけど。
あとローダがセクションヘッダ読むのも微妙だなぁと。これも mmap でやってりゃいらんと思うんだけど。
9.3 章、 undump の話。これも mmap すればいいやろ、って感じが。 P.197 の malloc により取得したメモリの考慮が必要、とかはちょっとなんの考慮が必要なのかわからない気がする。 PT_LOAD を全部ちゃんと復元すればたぶん動くと思うけど。
復元後に printf が動かなかった、って書いてあるけど、これはなんでだろう。あとひとつ気になるのは、復元中に fprintf とかしてるけど、これ当然 .data が塗り潰された後に動いてるのは単に運が良いだけなような、ていう。
なんか最後の方で実践的感が減ってる気がしたのが少し残念だった。でもまぁなんかでもよくまとまってる感じではあるかなぁ。
(01:06)
前 | 2014年 5月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。