2017-06-11 82 views
0

我想在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 

回答

0

找到了答案: 字符串不是原始数据类型,所以你保存/满载它:

aastore (number) 
aaload (number) 
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到,并调用print的 “Hello World”。然后print得到message并打印它与System.out.println调用,从您的原始代码中被盗。虽然我很想成为阅读jasmin文档的这两页并知道所有内容的神奇人物,但在这个过程中,我还发现JDK附带了一个反编译器(JDK/bin/javap),并且它如果用-c开关调用它,则会产生“拆卸”。不知何故,invokevirtual只是不想工作的静态方法...

+0

我的意思是这样的: 如果我做一个字符串,并希望以后引用它,我如何存储(保存)它。 – Vural