`

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插件

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics