0

Soot のパドル フレームワークを使用して、20KLOC ~ 50KLOC の Java コードを持つ Android アプリのコンテキスト依存の「ポイント」分析を実行しようとしています。アプリにはメイン メソッドがないため、複数のエントリ ポイントを持つようにすすを変更しました。分析を実行すると、次の例外がスローされます

Exception in thread "main" java.lang.RuntimeException: Value 65543 was too large in      domain soot.jimple.paddle.bdddomains.MethodDomain!
at jedd.internal.Domain.setBits(Domain.java:62)
at jedd.internal.Jedd.literal(Jedd.java:158)

パドル ソース コードの SigDomain.jedd ファイルの SigDomain(14) の値を 14 に増やしたため、分析の実行時間が大幅に長くなりましたが、最後には同じ例外が発生して失敗しました。(jvm のスタック サイズとヒープ サイズも 1 GB と 4 GB に増やしました)。この値 SigDomain(14) を ~20000 のように大きく設定すると、パドル分析は開始されません。

パドルには次のオプションがあります。

    opt.put("verbose","true");
    opt.put("bdd","true");
    opt.put("backend","javabdd");
    opt.put("context","kcfa");
    opt.put("k","2");
    opt.put("propagator","auto");
    opt.put("conf","ofcg");
    opt.put("order","32");
    opt.put("q","auto");
    opt.put("set-impl","double");
    opt.put("double-set-old","hybrid");
    opt.put("double-set-new","hybrid");
    opt.put("pre-jimplify","false");


    PaddleTransformer pt = new PaddleTransformer();
    PaddleOptions paddle_opt = new PaddleOptions(opt);
    pt.setup(paddle_opt);
    pt.solve(paddle_opt);
    soot.jimple.paddle.Results.v().makeStandardSootResults();
4

1 に答える 1

0

Soot のメンテナーの 1 人として、私たち全員が StackOverflow を監視しているわけではないので、通常は Soot メーリング リストでより迅速にヘルプが得られることをお知らせします。Ondrej Lhotak がこれを手伝ってくれるかもしれません...

コンテキスト依存の分析は、一般に非常にコストがかかります。考えられる解決策は、(1) 需要主導の状況依存分析 (Soot もサポートしています。コマンド ライン オプションを確認してください) を実行する、(2) 独自のポインター抽象化を作成する、(3) ランタイムの一部を除外する、のいずれかです。分析からのライブラリ(これは不健全です)。それが役立つことを願っています...

于 2013-02-04T07:58:53.473 に答える