我正在尝试使用Soot的paddle框架对拥有20KLOC-50KLOC Java代码的android应用程序进行上下文相关的“指向”分析。我已经修改了烟灰,因为应用程序没有main方法,所以有多个入口点。当我运行分析时,它抛出以下异常
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选项:
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();发布于 2013-02-04 15:58:53
作为Soot的维护者之一,我建议您在Soot邮件列表上获得更快的帮助,因为并非所有人都在关注StackOverflow。Ondrej Lhotak也许能帮上忙
上下文敏感分析通常是非常昂贵的。可能的解决方案是(1)进行需求驱动的上下文敏感分析( Soot也支持;检查命令行选项),(2)构造自己手工制作的指针抽象,或(3)从分析中排除一些运行时库(这将是不可靠的)。希望这能帮上忙。
https://stackoverflow.com/questions/14675438
复制相似问题