首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用soot+paddle进行大程序分析

用soot+paddle进行大程序分析
EN

Stack Overflow用户
提问于 2013-02-04 01:57:50
回答 1查看 509关注 0票数 0

我正在尝试使用Soot的paddle框架对拥有20KLOC-50KLOC Java代码的android应用程序进行上下文相关的“指向”分析。我已经修改了烟灰,因为应用程序没有main方法,所以有多个入口点。当我运行分析时,它抛出以下异常

代码语言:javascript
复制
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)

我在paddle源代码的SigDomain.jedd文件中增加了SigDomain( 14 )的值14,这导致分析运行的时间更长,但最后还是失败了,给出了相同的异常。(我还将jvm的堆栈大小和堆大小分别增加到1 GB和4 GB)。如果我将这个值SigDomain(14)设置得太大,比如~20000,那么划桨分析甚至不会开始。

我有以下的paddle选项:

代码语言:javascript
复制
    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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-04 15:58:53

作为Soot的维护者之一,我建议您在Soot邮件列表上获得更快的帮助,因为并非所有人都在关注StackOverflow。Ondrej Lhotak也许能帮上忙

上下文敏感分析通常是非常昂贵的。可能的解决方案是(1)进行需求驱动的上下文敏感分析( Soot也支持;检查命令行选项),(2)构造自己手工制作的指针抽象,或(3)从分析中排除一些运行时库(这将是不可靠的)。希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14675438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档