Jasmin ByteCode存储字符串

时间:2017-06-11 20:14:46

标签: string jvm-bytecode jasmin

我正在尝试在Jasmin Bytecode中存储一个字符串。在分配了一些研究之后,我找不到这是否可行,如果可能的话,应该怎么做。我只能找出如何将其打印出来(这是我打印字符串的方式)。 我还想过将字符串存储为字符数组,但我认为应该有一种更简单的方法。

{{1}}

2 个答案:

答案 0 :(得分:0)

找到答案: 字符串不是原始数据类型,因此您使用以下命令保存/加载它:

aastore (number)
aaload (number)

答案 1 :(得分:0)

看到你的答案,现在我不确定问题是什么。

无论如何,这对我有用:

.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

一切都是静态的,这不是很好,但mainmessage设置为" Hello World。",并调用print。然后print获取message并使用System.out.println来自您原始代码的-c来电打印。

虽然我很想成为那些阅读这两页jasmin文档并且知道所有内容的神奇人物,但在这个过程中我实际上也挖掘出JDK带有反编译器(JDK / bin / javap),它产生了'拆卸'如果你用invokevirtual开关调用它。不知怎的Case只是不想处理静态方法......