2015-10-01から1ヶ月間の記事一覧

Javaのバイトコードで遊ぶ (条件分岐と繰り返し)

Javaのバイトコードで遊ぶ (Hello World) 条件分岐と繰り返しはジャンプを使います。 ジャンプ先の指定はLabelを用います。ジャンプ元ではインスタンス化したLabelを指定します。 visitLabelにLabelインスタンスを渡せば、そこがラベルになります。 ジャンプ…

Javaのバイトコードで遊ぶ (四則演算)

Javaのバイトコードで遊ぶ (Hello World) 加算や減算などの基本的な数値演算をやってみます。 まずはintやfloatの計算。 定数値をスタックに積む命令にはバリエーションがあります。 値の大小に応じて、BIPUSHやSIPUSHを使う方法や、visitLdcInsnで任意の値…

Javaのバイトコードで遊ぶ (メソッド呼び出し)

Javaのバイトコードで遊ぶ (Hello World) INVOKEDYNAMIC以外のINVOKE系の命令を使ってみます。 INVOKESTATICはstaticメソッドを呼び出します。引数を順にスタックに積んでから呼び出します。 呼び出し後は引数がスタックから取り除かれ、戻り値がある場合は…

Javaのバイトコードで遊ぶ (Hello World)

ASMを使ってJavaのバイトコードを生成して遊んでみます。 まずはその準備について。 Javaのバージョンは1.8.0_60、ASMのバージョンは5.0.3です。 生成したバイトコードを実行したり、クラスファイルに書き込みたいので そのためのユーティリティ(ExampleUtil…