Jasmin simple example

4003 ワード

.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プラグイン