Javaバイトコード復習 (0) - 導入
ちょっとアイデアが出たのでバイトコード上でのモデル検査をやろうかなと思ってます。ただ、バイトコードを最後に触ったのが4年前だかですっかり忘れてたので、復習の過程をまとめていこうかと。
バイトコードはバイナリエディタで書くのがつらすぎるので、Jasminとかいうアセンブラを使います。
ダウンロード
http://jasmin.sourceforge.net/ の "Download Jasmin from SourceForge" から jasmin-2.3.zip をダウンロードしてくる。
インストール
インストールってほどのものでもないけど、次のようなフォルダ構成を作る。
- フォルダ構成
+-jasmin/ | +-src/ (作業フォルダ) | +-bin/ (クラスファイル出力先) | +-lib/ | | | +-jasmin.jar (jasmin-2.3.zipに同梱) | +-jasmin.bat (これから作る)
- jasmin.bat
@echo off java -jar lib/jasmin.jar -d bin -g -e UTF-8 %1 %2 %3 %4 %5 %6 %7 %8 %9
jasminディレクトリで、 jasmin src/Hoge.j 見たいな感じで使います。出力先は bin/ 以下な感じ。シェルスクリプトな人も@echo offを消して最後を $@ に変えるだけでOKかと。
Hello, world!
基本はHello, world!です。ソースは src/Hello.j に。
- src/Hello.j
; public class Hello /* extends Object */ { .class public Hello .super java/lang/Object ; public static void main(String[] args) { .method public static main([Ljava/lang/String;)V .limit stack 2 .limit locals 1 ; System.out.println("Hello, world!") getstatic java/lang/System/out Ljava/io/PrintStream; ldc "Hello, world!" invokevirtual java/io/PrintStream/println(Ljava/lang/Object;)V ;} return .end method
「言語は生産性と関係ないよ」と偉い人がおっしゃっていましたが、高級言語と低級言語じゃ違いすぎるorz