Jasmin 字节码存储字符串



我正在尝试在Jasmin Bytecode中存储一个字符串。经过大量的研究,我找不到这是否可能,如果是,应该如何做。我只能找出如何打印出来(这就是我打印字符串的方式(。我还想到将字符串存储为字符数组,但认为应该有更简单的方法。

.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

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

无论如何,这对我有用:

.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。不知何故,invokevirtual只是不想使用静态方法......

找到答案:字符串不是基元数据类型,因此您可以保存/加载它:

aastore (number)
aaload (number)

相关内容

  • 没有找到相关文章

最新更新