3


HTMLファイルのコンテンツを取得するアプリがあります。

ページのテキストは次のとおりです。

String[] arr = new String[] {"!","@","#"};
for (String str :  arr) {
write(str);
}

どういうわけかこのテキストをコンパイルしてアプリ内でコードを実行できますか?

ありがとう

4

5 に答える 5

4

Janinoを使用します。これは、Javaランタイムのメモリ内コンパイラです。BCELなどよりもはるかに簡単です。

ホームページから:

「ジャニーノとは?

Janinoは、超小型、超高速のJava™コンパイラです。ソースファイルのセットをJAVACツールのようなクラスファイルのセットにコンパイルできるだけでなく、Java™式、ブロック、クラス本体、またはソースファイルをメモリにコンパイルし、バイトコードをロードして、同じJVM。Janinoは開発ツールではなく、実行時のコンパイルを目的とした組み込みコンパイラです...

于 2012-08-12T20:28:36.467 に答える
1

javacコンパイラー、またはJavaコンパイラーAPIまたはBeanShellライブラリー(または同様のもの)を使用できます。あなたはそれをいくつもの方法でコンパイルすることができますが、あなたの問題を解決するための別の方法を見つけることにつながるほど単純なものはありません。

ソースを生成し、ASM、Javaassist、BCELなどを使用してバイトコードを直接生成するためにその共通をコンパイルする代わりに


これはと同じように見えます

for(char ch: "!@#".toCharArray())
    write(ch);

これはと同じである可能性が高いです

write("!@#");
于 2012-08-12T20:13:00.310 に答える
1

質問にはタグが付けられているのでandroid

これまでに投稿された回答は、AndroidのDalvik VMではなく、「標準」JVMにのみ適用されます。原則として、Androidでも可能です。埋め込むことができる既存のJavaコンパイラがあるかどうかはわかりませんが、おそらくdexmakerを使用して最終的なDalvikバイトコードを生成するでしょう。既存のJavaコンパイラをdexmakerと組み合わせることができる場合があります。

ただし、このようなことを試みる前によく考えて、十分に注意してください。最後に必要なのは、攻撃者がユーザーのハードウェア上で任意のコードを実行する方法です。

于 2012-08-12T20:34:32.717 に答える
0

javassistを試すことができますが、完全なJavaではありません。

于 2012-08-12T20:20:56.970 に答える
0

これは通常それほど難しいことではありませんが、あなたが達成しようとしていることを正確に詳しく説明していただけませんか。私はいつもこのタイプのことをします。これは、ユーザーから情報を取得し、それをコード内の別の場所で使用するもう1つの例です。Javaを使用しているので、文字列APIhttp://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlと文字列トークナイザーhttp://docs.oracle.com/javaseを見てください。 / 6 / docs / api / index.html?java / lang / package-summary.html

これで、文字列を一度に1つの単語または他の値の単一の値に分割できます。そこから、floatまたはdoubleクラスのisNAN()などの関数を使用して、それが数値か文字列か、またはテスト対象かどうかを判断できます。これで、何を扱っているかがわかり、使用可能な形式でデータを再構築できます。

値として使用する場合は、Float(string value)コンストラクターを使用することに注意してください。つまり、Float x = new Float(myString)

于 2012-08-12T20:22:32.717 に答える