18

誰かが私にJavaのエイリアス解析のフレームワークまたは実装を教えてもらえますか?asmフレームワークを見ましたが、データフロー分析と制御フロー分析しか提供していません。

更新:興味がありますが、Findbugsがエイリアス分析を行うかどうか誰かが知っていますか?

4

5 に答える 5

13

私は、Java のエイリアス分析を備えたオープンソースのプログラム分析フレームワークを 3 つ知っています。

  1. WALA (免責事項: 私は WALA メンテナーです)。
  2. すす
  3. コード

これらのフレームワークで実際に実装されているのは、可能性のあるエイリアシングを判断できるポイントツー分析であることに注意してください。WALA のポインター分析の詳細については、http: //wala.sourceforge.net/wiki/index.php/UserGuide:PointerAnalysis を参照してください。

于 2012-01-02T21:21:43.313 に答える
7

ポイントツー分析/エイリアス分析はほとんどのプログラム分析タスクの基本的な部分であるため、これは非常に重要な質問だと思います。そこで、Java のフレームワークのより完全なリストを作成しようとしました。いくつかは他のものよりも完全であり、これは活発な研究分野であるため、いくつか見逃している可能性があります. どちらの実装が最適かを言うのは難しいですが、DOOP と SPARK は学者の間で人気のある選択肢のようです。

  1. すす(スパーク)
    • PADDLE の前にリリースされましたが、まだ Soot コミュニティによって積極的に使用されています。SPARK は Soot に完全に統合されており、コンテキストに依存しない分析に適しています。
    • 論文: [1]
    • リソース: [1][2]
  2. すす(パドル)
    • 2005~2008年発売。Soot には PADDLE へのフロントエンドインターフェイスが含まれていますが、バックエンドは含まれていません。プロジェクトはもはや保守されていません (最新リリースの Soot では実行できませんでした)。Soot での分析のために、BDD ベースのセット表現とコンテキスト依存の複数の抽象化をサポートしました。
    • 論文: [1] , [2] , [3] , [4]
    • リソース: [1]
  3. bddbddb
    • 分析を効率的な BDD ベースの操作に変換する、宣言型の Datalog ベースの仕様。
    • 論文: [1] , [2]
    • リソース: [1]
  4. コード
    • CHORD は、コンテキストおよびコンテキストに依存しない分析のためのいくつかの標準的なポイントツー分析オプションを提供します。
    • リソース: [1][2]
  5. ワラ
    • WALA には、Interprocedural Distributive Environment (IDE) データ フロー アルゴリズムが実装されています。
    • 論文: [1]
    • リソース: [1][2]
  6. ドゥープ
    • MIT ライセンスの下でリリースされた宣言型 Datalog ベースの実装ですが、独自のLogicBlox Datalog フレームワークが必要です。このプロジェクトは現在、利用可能な最速かつ最も用途の広いフレームワークであるという主張を保持していると思います。これは非常に活発なプロジェクトでもあり、研究コミュニティで広く採用されています。
    • 論文: [1] , [2] , [3] , [4] , [5]
    • リソース: [1][2][3][4]
  7. アトラス (ツールボックスへのポイント)
    • 2016年に自分でリリース。Atlasのシンプルな Andersen スタイルのポイント分析。
    • Points-To Toolbox は MIT ライセンスの下でリリースされましたが、独自の Atlas フレームワークが必要です。
    • リソース: [1]
  8. スキューバ
    • 状況依存のポイントツー分析用の制約ベースのソルバー。
    • 論文: [1]

サードパーティのライブラリを扱うためのボーナス補助ツール。

  1. アヴェロエス
    • サードパーティ ライブラリの Java バイトコード サマリーを生成します。
    • 論文: [1] , [2]
    • リソース: [1]
  2. フローマイナー
    • サードパーティ ライブラリのフローとプロパティの XML 概要を生成します。
    • 論文: [1]
    • リソース: [1]
于 2016-02-21T18:17:53.070 に答える
1

OOPSLAで見たdoopがあるんだけど、どういう状態なのかわからない。

私は他の実装を知らず、大量の論文しか知りません。

于 2011-12-03T21:44:05.117 に答える
1

1 つの可能性は、OCaml で実装されたSawjaです。エイリアス分析はまだ含まれていないようですが、エイリアス分析を作成するためのビルディング ブロックが提供されています。

あなたのアップデートに関して、Bill Pugh の Google トークは、Findbugs がポインターを解決せずにコード内の特定のパターンを探すように聞こえます。もちろん、それは 2006 年のことなので、それ以降に何が起こったのかは誰にもわかりません... 時の流れは速いものです。

于 2011-12-03T21:57:39.670 に答える
0

当社のDMS ソフトウェア リエンジニアリング ツールキットとそのJava フロント エンドを使用して、これを構築できます。

DMS は、汎用解析、ツリー/シンボル テーブルの構築、およびフロー分析 (制御フロー、データ フロー、ポイント先、コール グラフなど) 機能を提供します。フロントエンドをこの機械に接続することで、ほとんどの機械をゼロから構築することなく、言語固有の分析を実装できます。これらは、非常に大規模な C アプリケーションでグローバル ポイントツー分析とコール グラフの構築を行い、C++ でフロー分析を制御するために使用されています。

Java の場合、メソッド ローカル制御フローが実装されており、ローカル データ フローのいくつかの側面があります。適切なエイリアス分析を行うには、コール グラフの作成に記入する必要があります。

于 2011-12-03T23:20:53.160 に答える