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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值