問題タブ [soot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Javaのブール式用のバイナリ式ツリーライブラリの推奨事項
私はSootを使用してJavaでいくつかの非常に単純なプログラム分析/変換を行っていますが、ブール式のいくつかの単純な組み合わせを実行する必要があることに気付きました。したがって、たとえば、分析中に、のような式があり、その式をOR演算子を介し(a < 25) && (b >= 10)
て結合して、のような完全な式を取得したいとします。基本的には、2つのブール式ツリーを1つの式に結合するだけです。さらに、式ツリーを同等の連言標準形のツリーに自動的に変換したい場合があります。(a >=-10)
(a >=-10) || (a < 25) && (b >= 10)
私が持っているもう1つの要件は、簡単に削除できる式がある場合に、式を(必要に応じてカスタムコードを介して)単純化する機能です。たとえば(a < 20) || (a >= 20)
、になりますTRUE
ので(a < 20) = (!(a >= 20))
、いくつかの用語を削除できます。
ブール式ツリーをコード化することは古典的な導入上の問題であることを私は知っています、そして私は以前にそれを実装したことをかなり確信しています(かつて、データ構造クラスのために:))必要です...しかし、これは以前に処理された可能性が高いことを考えると、上記に取り組むために調査する必要があるライブラリに関する推奨事項があるかどうか疑問に思います。おそらく完全に良いものがすでにそこにあるとき、私は車輪を再発明するのが嫌いです。
要約すると、私は次のようなJavaライブラリを探しています。
- ブール式ツリー
- 式の組み合わせ
- 用語の簡略化(これはかなり具体的であるため、「持っていると便利」です)
- CNFへの変換
何かお勧めはありますか?
(注:これらのツリーを評価しないので、各ノードはまたはのような未解決の述語になるvariable != 20
ためfoo >= 50
、評価は必須ではありませんが、ライブラリの一部である場合でも問題はありません。)
java - jimpleファイルのメソッドで定義された変数がJavaクラスファイルのどの変数に対応するかを知るにはどうすればよいですか?
Sootは、Javaクラスファイルをローカル変数の名前が変更されたjimpleファイルに変換します。ここで、どのSootがそれを行うかに基づいたスキームを知りたいと思います。
java - soot.Main.main(...) を呼び出さずにすす分析を使用することは可能ですか?
Sootを使用して、たとえば制御フロー グラフを含む Java プログラムの静的分析を行いたいと考えています。
さまざまなチュートリアルでは、Sootを使用する「標準的な方法」は、カスタム変換を Soot パイプラインに追加してからsoot.Main.main(...)を呼び出すmain メソッドを作成することであると述べています。
もちろん、コマンド ライン ツール以外で Soot を使用する場合、これにはいくつかの重大な制限があります。たとえば、プログラムで Soot の main メソッドを複数回呼び出すことが合法であるかどうかさえ、私にはわかりません。
では、もう少し洗練された API を介してすす分析ツールを直接使用する可能性を知っている人はいますか?
java - すす+パドルによる大規模なプログラム分析
Soot のパドル フレームワークを使用して、20KLOC ~ 50KLOC の Java コードを持つ Android アプリのコンテキスト依存の「ポイント」分析を実行しようとしています。アプリにはメイン メソッドがないため、複数のエントリ ポイントを持つようにすすを変更しました。分析を実行すると、次の例外がスローされます
パドル ソース コードの SigDomain.jedd ファイルの SigDomain(14) の値を 14 に増やしたため、分析の実行時間が大幅に長くなりましたが、最後には同じ例外が発生して失敗しました。(jvm のスタック サイズとヒープ サイズも 1 GB と 4 GB に増やしました)。この値 SigDomain(14) を ~20000 のように大きく設定すると、パドル分析は開始されません。
パドルには次のオプションがあります。
soot - すすを使用して関数を実行する
特定のクラスのすべての関数の実行時間を測定するためにすすを使用しようとしています。Eric Bodden による Soot Framework のすべてのチュートリアルを読もうとしました。
私が今までに思いついたのはこれです、
ここに私のTestClassがあります
eclipse で add variable を使用し、Java アプリケーションのように実行して、sootclasses を追加しました。
これは私のプログラム出力です:
これで、Soot がバイトコードを読み取り、すべてのメソッドをステップ実行していることがわかります。私がやりたいことは、それぞれを実行することです。これはすすフレームワークを使用して可能ですか??
java - Soot Java バイトコード フレームワーク: 単一のクラス ファイルを Jimple/Shimple にコンパイルする方法
既存のプロジェクト (メタサーキュラー インタープリター) で Soot を使用する方法を理解しようとしています。具体的には、Soot を使用して Java バイトコードを、解釈可能な便利な 3 アドレス コード (Jimple または Shimple) に変換したいと考えています。後でもっとやりたいことがあるかもしれませんが、今のところは変換だけが必要です。
この翻訳を実行する最良の方法は何ですか? すすは膨大な数の機能を備えた巨大なプロジェクトのように見えますが、実際に必要なのは 1 つのメソッドだけです
できる限り純粋なものが望ましいです (つまり、セットアップやティアダウンは不要で、すべてがそのメソッド内にパッケージ化されています)。私は何時間も javadoc/papers/presentations を調べてきましたが、それらのほとんどはコマンド ライン ツールまたは Eclipse プラグインとしての使用に焦点を当てているようです。どこから始めるべきかについて、誰かが私にいくつかの指針を与えることができますか?
java - Java バイトコード依存の回帰テストを簡単に作成する方法は?
特定のバイトコード命令でのみ発生するアプリケーション (soot を使用してバイトコードを処理する) のバグを特定しました。
その特定のケースのテストを作成したいと思います。ただし、期待されるバイトコードにコンパイルされるテストコードを確実に作成することはできません。これにより、バグがトリガーされます。
これは、バグをトリガーする私の試みです:
問題は、コンパイラが比較を反転し、2 つの分岐を切り替えることによって分岐ロジックを変更することです。以下のバイトコードでわかるように、 の!=
代わりに比較を行い==
ます。ただし、私がテストしているバグは、==
.
予測可能なバイトコードを簡単に生成する必要があるテスト ケースを作成する方法はありますか? さまざまなJavaコンパイラ、そのバージョンなどがある場合、これはまったく可能ですか?