Jasmin simple example
.bytecode 50.0
.class public cn/test/Hello
.super java/lang/Object
;private String title = "test"
.field private 'title' Ljava/lang/String;
;public Hello()
.method public <init>()V
.limit locals 1
.limit stack 2
aload 0
invokespecial java/lang/Object/<init>()V
aload 0
ldc "test"
putfield cn/test/Hello/title Ljava/lang/String;
return
.end method
;public Hello(String title)
.method public <init>(Ljava/lang/String;)V
; 0 this, 1 title
.limit locals 2
.limit stack 2
aload 0
invokespecial java/lang/Object/<init>()V
aload 0
ldc "test"
putfield cn/test/Hello/title Ljava/lang/String;
;this.title = title;
aload 0 ;this
aload 1 ;title
putfield cn/test/Hello/title Ljava/lang/String;
return
.end method
;public int show(String s)
.method public show(Ljava/lang/String;)I
; 0 this, 1 s
.limit locals 3 ; 3
.limit stack 2 ;stack 2
;String msg = "this_is_msg"; 2
ldc "this_is_msg" ;push
astore 2 ;pop to 2
;System.out.println(this);
getstatic java/lang/System/out Ljava/io/PrintStream; ; out stack
aload 0 ;println
invokevirtual java/io/PrintStream/println(Ljava/lang/Object;)V ;
;System.out.println(s);
getstatic java/lang/System/out Ljava/io/PrintStream;
aload 1
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
;System.out.println(msg);
getstatic java/lang/System/out Ljava/io/PrintStream;
aload 2
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
;this.title = "ttttttttttttt";
aload 0 ;this
ldc "ttttttttttttt" ;
putfield cn/test/Hello/title Ljava/lang/String;
;System.out.println(this.title);
getstatic java/lang/System/out Ljava/io/PrintStream;
aload 0 ;this
getfield cn/test/Hello/title Ljava/lang/String;
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
;return 100;
bipush 100
ireturn
.end method
;public static void main(String[] args)
.method public static main([Ljava/lang/String;)V
.limit locals 3
.limit stack 3
;System.out.println("test begin");
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "test begin"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
;Hello h = new Hello("hhhhhhh");
new cn/test/Hello
dup
ldc "hhhhhhh"
invokespecial cn/test/Hello/<init>(Ljava/lang/String;)V
;int r = h.show("call show");
astore 1 ;
aload 1
ldc "call show"
invokevirtual cn/test/Hello/show(Ljava/lang/String;)I
istore 2
;System.out.println(r);
getstatic java/lang/System/out Ljava/io/PrintStream;
iload 2
invokevirtual java/io/PrintStream/println(I)V
return
.end method
JArをJasminファイルに変換: dex2jar\d2j-jar2jasmin.bat -f some.jar
リファレンス
http://jasmin.sourceforge.net/guide.html
http://jasmin.sourceforge.net/instructions.html
Word Size
インストラクション
eclipseプラグイン