最近eclipseを使う機会が増えました。Ruby on RailsとかOVMとかで良く使ってます。メインはOVMかな。そうなるとわりとJavaのお世話になる機会も増えたりして。例外はいて落ちたりすると中を追いかけたくなるのが人情というもの。という事で便利に使ってるのが以下のツール。
- Jad (decompiler)
- ClassFileAnalyzer (disassembler)
- jasmin (assembler)
1つ目はいわゆる逆コンパイラですね。classファイルにはメソッド名やメンバ変数名に関する情報も残ってたりするので、かなり可読性の高いコードに戻してくれます。とりあえず落ちた場所の周辺をざっと見るのに便利です。んで、単純な場合はこのまま逆コンパイルで得られたソースを直して、再びコンパイルすれば片付くんですが・・・解析が不完全に終わるとコンパイルできないソースを吐く事が多々あります。そんな時は2つ目のツール。こいつはいわゆる逆アセンブラで、classファイルを3つ目のツールに対応したアセンブラコードに変換してくれます。そんなわけで3つ目はアセンブラ。逆コンパイルが不完全な時にも、2と3のツールがあればソースに戻してからパッチを当てて、再びclassファイルに戻す事ができます。HAS、HLK、DISがあればなんでもできた、古き良きX68kユーザ時代を思い出します。
*1: http://web.archive.org/web/20080214075546/http://www.kpdus.com/jad.html
*2: http://classfileanalyzer.javaseiten.de/
*3: http://jasmin.sourceforge.net/