2017-06-11 85 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