Archive for 1月 6th, 2012

  1. Hello, Java VM Assembler World!

    Posted on 1月 6th, 2012 by cx20

    Java VM Assembler

    Java VM アセンブラは Java VM の中間コード(バイトコード)を生成するアセンブラである。
    主要な Java VM アセンブラとしては、Jasmin 等がある。

    ソースコード

    .class public Hello
    .super java/lang/Object
     
    .method public ()V
       aload_0
       invokespecial java/lang/Object/()V
       return
    .end method
     
    .method public static main([Ljava/lang/String;)V
       .limit stack 2
       getstatic java/lang/System/out Ljava/io/PrintStream;
       ldc "Hello, Java VM World!"
       invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
       return
    .end method

    上記コードは以下の Java のソースに対応する。
    クラスファイルを tinapoc と言った逆アセンブラや javap で逆アセンブル(javap -c Hello)することでアセンブリコードを得られる。

    public class Hello {
        public static void main( String[] args ) {
            System.out.println( "Hello, Java VM World!" );
        }
    }

    コンパイル&実行方法(Jasmin)

    $ java -jar jasmin.jar Hello.j
    $ java Hello

    実行結果

    Hello, Java VM World!