Entry

今読んでる本 - 『Advanced Windows Debugging』

2011年10月17日

久しぶりに本の話。

何も読んでいないわけではなくて,これ読んでます。Windows のバイナリアンは必携。

Advanced Windows Debugging (Addison-Wesley Microsoft Technology Series)
Mario Hewardt Daniel Pravat
Addison-Wesley Professional
売り上げランキング: 55350

ペーパーバック版は,Amazon.co.jp で 5,500 JPY,Amazon.com でも 44.31 USD と少しお高いです。けれど,Kindle 版では 25.40 USD と今のレートで 2,000 JPY を切る破格値。当然,注文すれば自分の Kindle にすぐ届くので,送料も待ち時間もありません。また,ペーパーバック版は,800 ページ以上もある分厚い本なので,持って歩くのはまず不可能だけれども,Kindle なら軽々持ち運べます。Kindle 買っててよかったと心から思います。

本書には一応訳本があるんだけれども,これだけのメリットを目の前にして,わざわざ訳本を買うメリットが見つかりません。英語に特別抵抗がない限り,Kindle 版がおすすめです。訳本だけにマージンが乗るわけで,こちらは古本で 7,800 JPY のようです(もう刷ってないようだけれども)。普段は「訳本で済むなら訳本読んどけ派」だけれども,価格的にも読書環境的にも送料・待ち時間的にも,Kindle 版の原書がもっとも敷居が低いと思います。

Windowsデバッグの極意 ツールを使いこなして、バグハント!
Mario Hewardt Daniel Pravat
アスキー・メディアワークス
売り上げランキング: 88961

いずれにしても,本書は Windows OS 上で開発を行う人は必携の書籍です。あたしはとりあえず半分くらい読み終わったところ。本書の重点は,デバッグツール(特に WinDbg)の基本的な使い方を扱った Part I と,ケーススタディである Part II にあるので,とりあえずどんな本かは書けると思います。

本書は,Windows OS 上で動作するネイティブアプリケーションを開発している人向けに,そのデバッグ手法を説明した書籍です。

C/C++ のプログラムをデバッグする場合,IDE にくっついているデバッガを利用するのが一般的です。しかし,Windows OS 上の開発する際,実は,便利なツールや有用なデバッグ上のテクニックがたくさん用意されているんですね。そして,残念なことに,こうしたツールやテクニックは見逃されがちで,多くの開発者は C/C++ のセマンティックスに依存したデバッグを行っていることが多かったりする。

ところが,ネイティブアプリケーションに限らず巷のプログラムは,C/C++ ソースとしてのコードではなく,コンパイルされ最適化されリンクを経た後のオブジェクトコードとして動いています。また,システムプログラミングでは,カーネルの動作も自分のプログラムに大きく影響するわけですけれど,カーネルのコードは自分のコードに現れません(当たり前だけれども)。つまり,ソフトウェアが動かない本当の原因を知るには,ソースを追いかけるだけでは絶対的に不十分というわけです。

WinDbg をはじめとしたカーネルデバッガは,カーネルのコードも追いかけることができるし,あるユーティリティは,Windows 上のメッセージをトラップして通知してくれる機能がある。これらの使い方を,本書の Part I では非常に詳しく説明しています。また,注目すべきは,このパートがツールの使い方だけでなく,これらが OS のどのような機能を利用しているのかについても詳説している点です。最近はお手軽な開発環境が流行っているせいか忘れられがちだけれども,開発用のツールは,それがどのような原理で動いているのか踏まえていないと,それを使いこなしていることにはなりません。「デバッガがそう言ってるから」とかいった理由でバグを特定することはできないし,デバッガがそもそもバグっているときのようなイレギュラーに対応できないからです。本書で書かれている原理はとても基本的なことだけれども,それについて書かれている本は大変少ない。その意味で,本書は非常に貴重です。

また,プログラムのデバッグは,コンピュータや OS の知識を総合的に踏まえて論理的に行う必要があります。本書では,ケーススタディ(Part II)を通じて,デバッガでなぜそのような操作をするのか,出力された結果(ダンプなど)を見て何が分かるのかを,大変丁寧に説明しています。サンプルプログラムが用意されているので,本書を読むに当たっては,実際にデバッガを操作しながら読むと,デバッグの実際と考え方が身に付くと思います。

とゆことで,是非是非おすすめな本なんだけれども,読めない人に勧めても本棚の肥やしになってしまうだけなので,一応,読めそうな人の水準を書いておきます。

本書の開発言語は C++ だけれども,C しか知らなくても不都合なく読めると思います。もっとも,本書はアセンブリをそれなりに読める人を相手にしているので(解析は C/C++ のソースとアセンブリのダンプの双方を使って行っている),X86 系のアセンブリは読める必要がある。これは,「読めれば便利」という話ではなく,アセンブリが全く読めない向きは,本書が何を言ってるか分からないと思う,とゆこと。ただ,すべてを理解している必要なく,基本的な書式と基本的な命令が分かっていれば読めるはずです。例えば,mov edi edi という命令が「奇妙だ」と思えるくらいなら,本書を読めると思います(何の注釈もないので)。

また,スタックや呼び出し規約についても,うっすらとは知っていたほうがいいかもしれない。一応,詳しく説明されていて,ところどころ図示もあるけれど,スタックフレームそのものの説明がアセンブリとスタック領域のダンプで説明されているので,何も知らない場合は混乱するかもしれません。

こゆ本は,結局のところ読むだけではダメで,実際に手を動かしてプログラムの挙動やメモリの変化を確かめる必要があるのだと思います。なかなか難儀だとは思うけれども,確実に血肉になると思う。こゆ本が昔あったらな……と,しみじみ思う。とゆわけで,重ね重ね,お勧めです。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN