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

すべてが素敵されていない、静的ですが、mainセットにmessage、およびprintを呼び出すの "Hello World。"。その後printmessageとなり、元のコードから盗まれたSystem.out.printlnコールで印刷されます。

jasminのドキュメンテーションの2ページを読んで、すべてを知っている魔法の人になりたいのですが、実際にはJDKにはデコンパイラ(JDK/bin/javap)が付属しています。 -cスイッチで呼び出すと '逆アセンブリ'が発生します。何らかの形でinvokevirtualは、静的メソッドを処理したくないだけです...

+0

私はこれを意味しました: Stringを作成して後で参照したい場合は、どうすれば保存できますか? – Vural

関連する問題