レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

久々に興奮したJavaの書籍「デコンパイリングJava」(オライリー)

Javaの本に、こんなにワクワクしたのは久しぶりでした。
というのも、オライリー・ジャパンさんから献本いただいたこの本。

デコンパイリングJava ―逆解析技術とコードの難読化 (Art Of Reversing)

デコンパイリングJava ―逆解析技術とコードの難読化 (Art Of Reversing)

6月3日発売とのことで、一足早くレビューさせて頂きました。


デコンパイルと難読化をテーマにしているニッチな本ではありますが、
中級以上のJavaエンジニアには、この本を一度手にとって欲しいと思います。

Javaデコンパイルは、難しい話題のように感じられるかもしれませんが、
実は仕組みとしてはそんなに難しい話ではないことが、本書を読み進めるうちに感じられると思います。
デコンパイルを知ることによって、クラスの仕組みやJVMの仕組みを深く知ることができます。


テーマがハッキリしているので本のボリュームがそれほど莫大ではないのが魅力の一つ。
また、翻訳が読みやすいのがいい感じです。

さらに、Java好きにはソソるポイントですが、
「独自デコンパイラの実装」をサンプルとして具体的にソースコードを載せて解説しているので、
最終的には、そこそこ使えるデコンパイラのサンプルが手に入ります。
このサンプルを土台にして、独自のデコンパイラを拡張して作っていけるってところがワクワクポイントですね。


その他、気に入った箇所が幾つかあって、例えばクラスファイルのバイナリフォーマットの16進数とオペコードの対応表です。
これ暗記したらバイトコードを生で読めるようになったりするかなぁとか夢想してしまいます。
マトリックスの主人公ネオ的に)
また、Javaのクラスを16進数でダンプすると「0xCAFEBABE」ではじまってるとかいう、ちょっとした雑学も面白いです。
僕的には、CやC++のネイティブメソッドを呼び出す技Jniを思い出させてくれたのも、ちょっとした収穫でした。


フレームワークを作ったりしてると、バイトコードエンハンサとかを
触るようになるのですが、そういう事やりだすとバイトコードについての理解もあった方がよいですね。


本書だけでは、JVMについての仕様があまり深く掘り下げられていないので、
Java仮想マシン仕様」(ピアソン・エデュケーション)をあわせて読むのがよいと思います。

Java仮想マシン仕様 (The Java series)

Java仮想マシン仕様 (The Java series)

  • 作者: ティムリンドホルム,フランクイェリン,Tim Lindholm,Frank Yellin,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2001/05
  • メディア: 単行本
  • 購入: 5人 クリック: 98回
  • この商品を含むブログ (35件) を見る


JavaのメインフィールドであるサーバーサイドJavaでは、
具体的な活用に結びつかないテーマなので、その辺で評価が割れるかもしれません。

また難読化について紙面が結構割かれていますが、これもサーバサイドJavaエンジニア
からすると多少退屈さを感じるかもしれませんね。
しかしWebStartでSwing作ったり、アップレット作ったりするなら難読化も重要でしょう。


Javaデコンパイルという分野は、バージョンが変わったからといって
廃れてしまうような技術ではなく、おそらく何時まで経ってもこの本は古くならないので、
一冊持っておいて損はないと思います。