Java逆アセンブラ制作中
Jadを始めとする逆コンパイラではないので注意. Javaで言えば,逆コンパイラとはclassファイルを分析してその元となったjavaソース(に近いもの)を生成するソフトウェア.完全な逆コンパイラを作るには巧妙なデータフロー解析が必要で *1,そのスキルはまだ私にはない.それに対し逆アセンブラとはclassファイルを分析して内部構造やVMのマシン語を人に読める形で出力するもの.こちらはclassファイルの構造さえ知っていれば機械的な作業で作れる(めんどいけど).
Java Virtual Machine Specification 2nd ed.: http://java.sun.com/docs/books/vmspec/index.html
実は,JDKには標準でjavapという逆アセンブラが含まれている.というわけで車輪の再発明なわけだが,単にclassファイルをテキストとして読みたいだけでなく,構造を自由にいじるためのラッピングクラスを含めてモジュール化したいのだ *2.
以前Rubyで書いたものをJavaに移植し(何しろJavaのクラスファイルを分析する人なんだからJava処理系が必ずあるだろう)あわよくばAWTか何かでGUI(ツリー表示とか)も付け,さらにはエディタ機能も付けたいと思っている.そうなるとある種のアセンブラだな.いずれJavaのclassファイルを吐くコンパイラを作りたいと思っているんだけど,そのときに役立つツールになるとうれしい.
Ruby版: http://www.komaba.utmc.or.jp/~flatline/show_class.rb
これは別プログラムから利用できるようなモジュール化は一切していないし,それどころか分析した情報を(きれいな表示方法が思い付かなかったので)一部捨ててしまっているが,それでも直に書き換えればRubyistのどなたかには役立つかもしれない.いや駄目かも