Java class 转化为Jasmin汇编代码
Java class into Jasmin assembly code
import java.util.Scanner;
public class Sample {
public static void main(String []args){
Scanner scan = new Scanner(System.in);
int intAge;
intAge = scan.nextInt();
System.out.println("Your age is " + lol + " years old.");
}
}
有什么办法可以把这段代码转换成jasmin汇编代码吗?我很难找到一种方法来做到这一点。不胜感激。
http://classfileanalyzer.javaseiten.de/
一个人的项目,很老(2009 年最后更新),
但根据 wikipedia jasmin 的最后一次更新是 2010 年。
我用一个简单的文件对其进行了测试。
编辑:我正在展示示例的用法和输出以确保答案的完整性。 (上面代码中的lol
被替换为intAge
)
java -cp classfileanalyzer-0.8.0.jar ClassFileAnalyzer Sample.class
; Sample.j
; Generated by ClassFileAnalyzer (Can)
; Analyzer and Disassembler for Java class files
; (Jasmin syntax 2, http://jasmin.sourceforge.net)
;
; ClassFileAnalyzer, version 0.8.0
.bytecode 51.0
.source Sample.java
.class public Sample
.super java/lang/Object
.method public <init>()V
.limit stack 1
.limit locals 1
.line 3
0: aload_0
1: invokespecial java/lang/Object/<init>()V
4: return
.end method
.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 3
.line 5
0: new java/util/Scanner
3: dup
4: getstatic java/lang/System/in Ljava/io/InputStream;
7: invokespecial java/util/Scanner/<init>(Ljava/io/InputStream;)V
10: astore_1
.line 8
11: aload_1
12: invokevirtual java/util/Scanner/nextInt()I
15: istore_2
.line 10
16: getstatic java/lang/System/out Ljava/io/PrintStream;
19: new java/lang/StringBuilder
22: dup
23: invokespecial java/lang/StringBuilder/<init>()V
26: ldc "Your age is "
28: invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
31: iload_2
32: invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder;
35: ldc " years old."
37: invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
40: invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String;
43: invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
.line 12
46: return
.end method
假设您不需要专门使用 Jasmin,The Krakatau assembler/disassembler 可能就是您想要的。 Krakatau 可以将 assemble 类文件分解为类似 Jasmin 的语法,然后 assemble 将它们还原为类文件。但是,Krakatau 使用与 Jasmin 略有不同的语法以支持 Jasmin 无法处理的功能。
import java.util.Scanner;
public class Sample {
public static void main(String []args){
Scanner scan = new Scanner(System.in);
int intAge;
intAge = scan.nextInt();
System.out.println("Your age is " + lol + " years old.");
}
}
有什么办法可以把这段代码转换成jasmin汇编代码吗?我很难找到一种方法来做到这一点。不胜感激。
http://classfileanalyzer.javaseiten.de/
一个人的项目,很老(2009 年最后更新),
但根据 wikipedia jasmin 的最后一次更新是 2010 年。
我用一个简单的文件对其进行了测试。
编辑:我正在展示示例的用法和输出以确保答案的完整性。 (上面代码中的lol
被替换为intAge
)
java -cp classfileanalyzer-0.8.0.jar ClassFileAnalyzer Sample.class
; Sample.j
; Generated by ClassFileAnalyzer (Can)
; Analyzer and Disassembler for Java class files
; (Jasmin syntax 2, http://jasmin.sourceforge.net)
;
; ClassFileAnalyzer, version 0.8.0
.bytecode 51.0
.source Sample.java
.class public Sample
.super java/lang/Object
.method public <init>()V
.limit stack 1
.limit locals 1
.line 3
0: aload_0
1: invokespecial java/lang/Object/<init>()V
4: return
.end method
.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 3
.line 5
0: new java/util/Scanner
3: dup
4: getstatic java/lang/System/in Ljava/io/InputStream;
7: invokespecial java/util/Scanner/<init>(Ljava/io/InputStream;)V
10: astore_1
.line 8
11: aload_1
12: invokevirtual java/util/Scanner/nextInt()I
15: istore_2
.line 10
16: getstatic java/lang/System/out Ljava/io/PrintStream;
19: new java/lang/StringBuilder
22: dup
23: invokespecial java/lang/StringBuilder/<init>()V
26: ldc "Your age is "
28: invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
31: iload_2
32: invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder;
35: ldc " years old."
37: invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
40: invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String;
43: invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
.line 12
46: return
.end method
假设您不需要专门使用 Jasmin,The Krakatau assembler/disassembler 可能就是您想要的。 Krakatau 可以将 assemble 类文件分解为类似 Jasmin 的语法,然后 assemble 将它们还原为类文件。但是,Krakatau 使用与 Jasmin 略有不同的语法以支持 Jasmin 无法处理的功能。