4

現在、バイトコード分析を扱うプロジェクトに取り組んでいます。私はコードに出くわしました、

char[] buff = new char[1];
//some code tainting the buff   
return (new String(buff));

バイトコードで、関連するマッピングnew String(buff)

Ljava/lang/StringValue.cache

cacheこの分野がどこからシナリオに来るのか、誰か説明できますか?


jdk i.6、StringValueからのものです。説明によると、「このクラスは、値を格納するために文字列で使用される文字配列を操作する静的メソッドのみで構成されています。」

誰でもこれに光を当てることができますか?その目的は実際には何ですか?それは主に、引数として文字列に渡される、使用した文字バッファーが原因だと思います。このクラスはバッファの内容を変更するのではなく、バッファの内容が文字列を初期化するためだけのものであることを示す単なるゲートウェイだと思います。

4

2 に答える 2

2

それは本当に可能ではないはずです。最近のJavacでコンパイルした後、投稿したシーケンスは次のようになります。

iconst_1
newarray char
astore_1
new java/lang/String
dup
aload_1
invokespecial java/lang/String <init> ([C)V
areturn

さらに、java/lang/StringValue少なくとも jre1.7.0_17 の時点では存在しません。さらに、ピリオドの存在は、それがおそらく Jasmin のマージされたクラス/メソッド トークンの 1 つであることを示しています。この場合、実際にはLjavaパッケージ内のクラスを参照しています。

主に 2 つの可能性があります - 壊れたコンパイラまたは壊れた逆アセンブラです。ここにクラスファイルを投稿すると、少なくともそれらのどれが当てはまるかを把握できます.

于 2013-04-15T12:14:24.807 に答える