memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

JAVAバーチャルマシン

JAVAバーチャルマシン (THE JAVA SERIES)

JAVAバーチャルマシン (THE JAVA SERIES)

ずいぶん前に出版された本(訳本は1998年)ですが読んでいます。学生さんにアセンブラを勉強してもらうのも面白いなと思ったのがきっかけ。CASLでもいいか。。。と思っていたところでした。せっかくJavaを勉強しているなら、bytecodeを勉強してみるのもありなんじゃないかな?と思ったわけです。


まだ読み始めたばかりですが、ツール類の準備に手間取りました。恐らくいないとは思いますが、同じような人がいた場合に(というか自分用の)メモを残しておきたいと思います。ちなみに問題だったのはmacの場合です。windowsの場合は問題ありませんので。。。以下、読む必要はありません。


経緯を少し書きます。


.javaファイルをjavacでコンパイルして.classファイルを生成します。この本(の冒頭)では、この.classファイルをD-Javaというツールを使って逆アセンブルします。アセンブルコードを修正して、jasminというアセンブラで再び.classファイルを生成します。この操作を繰り返しながら、bytecodeを理解していきます。。。という流れだと思います(まだ全部読んでいないので)


で、D-javaとjasminの入手先は以下になります。使用マシンがwindowsであればこれで問題なしです。

Link: D-java.zip

Link: jasmin-2.3.zip


しかし、D-java.zipはexeファイルのみで、ソースファイルのリンクが切れているため、macなど他の環境ではD-javaを利用することができません。予備知識がなかったこともあり、ここからが結構時間がかかりました。逆アセンブラがあってもjasmin形式でアセンブルコードを出力しないなどの問題がありました。


で、結局、辿り着いたのがJasperというものでした。jasmin形式で逆アセンブルしてくれます。ちなみにjasminはjar形式のためwindowsでもmacでも問題なく動作します。

Link: Jasper


■補足

ちなみに、eclipseプラグインのASMは優れものだと思います。Javaのコードに対応したbytecodeをリアルタイム(セーブ時)に表示してくれます。どういうコードを書いたら。。。どういうbytecodeが生成される。。。ということが一目瞭然でわかります。バイトコードを修正して反映することができればこのプラグインだけで事が足りるのですが、そこまでは対応していないようです。

Link: Bytecode Outline plugin for Eclipse