Jasmin 字节码存储字符串
Jasmin ByteCode Storing a String
我正在尝试在 Jasmin 字节码中存储一个字符串。经过大量研究后,我找不到这是否可行,如果可行,应该如何完成。我只能找出如何打印出来(这就是我打印字符串的方式)。
我也考虑过将字符串存储为字符数组,但认为应该有更简单的方法。
.class public HelloWorld
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World."
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
找到答案:
字符串不是原始数据类型,因此您将 it/load 保存为:
aastore (number)
aaload (number)
看到你的回答,现在我不确定问题是什么。
无论如何,这对我有用:
.class public HelloWorld
.super java/lang/Object
.field static private message Ljava/lang/String;
.method public static main([Ljava/lang/String;)V
.limit stack 1
.limit locals 1
ldc "Hello World."
putstatic HelloWorld/message Ljava/lang/String;
invokestatic HelloWorld/print()V
return
.end method
.method public static print()V
.limit stack 2
.limit locals 2
getstatic java/lang/System/out Ljava/io/PrintStream;
getstatic HelloWorld/message Ljava/lang/String;
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
一切都是静态的,这不好,但是 main
将 message
设置为 "Hello World.",并调用 print
。然后 print
获取 message
并使用 System.out.println
调用打印它,从您的原始代码中窃取。
虽然我很想成为阅读那两页 jasmin 文档并且无所不知的神奇人物,但在这个过程中实际上我也挖掘出 JDK 附带了一个反编译器(JDK/bin/javap),如果你用 -c
开关调用它,它会产生 'disassembly'。不知何故 invokevirtual
只是不想使用静态方法...
我正在尝试在 Jasmin 字节码中存储一个字符串。经过大量研究后,我找不到这是否可行,如果可行,应该如何完成。我只能找出如何打印出来(这就是我打印字符串的方式)。 我也考虑过将字符串存储为字符数组,但认为应该有更简单的方法。
.class public HelloWorld
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World."
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
找到答案: 字符串不是原始数据类型,因此您将 it/load 保存为:
aastore (number)
aaload (number)
看到你的回答,现在我不确定问题是什么。
无论如何,这对我有用:
.class public HelloWorld
.super java/lang/Object
.field static private message Ljava/lang/String;
.method public static main([Ljava/lang/String;)V
.limit stack 1
.limit locals 1
ldc "Hello World."
putstatic HelloWorld/message Ljava/lang/String;
invokestatic HelloWorld/print()V
return
.end method
.method public static print()V
.limit stack 2
.limit locals 2
getstatic java/lang/System/out Ljava/io/PrintStream;
getstatic HelloWorld/message Ljava/lang/String;
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
一切都是静态的,这不好,但是 main
将 message
设置为 "Hello World.",并调用 print
。然后 print
获取 message
并使用 System.out.println
调用打印它,从您的原始代码中窃取。
虽然我很想成为阅读那两页 jasmin 文档并且无所不知的神奇人物,但在这个过程中实际上我也挖掘出 JDK 附带了一个反编译器(JDK/bin/javap),如果你用 -c
开关调用它,它会产生 'disassembly'。不知何故 invokevirtual
只是不想使用静态方法...