2013-02-03 80 views
0

我正在嘗試使用Soot的槳框架爲具有Java代碼的20KLOC-50KLOC的android應用程序執行上下文敏感的「指向」分析。由於應用程序沒有主要方法,因此我修改了soot以擁有多個入口點。當我運行分析它拋出以下異常菸灰+槳大程序分析

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(14)SigDomain.jedd文件中這引起了分析以失敗結束更長的時間,但仍然運行槳源代碼,增加值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(); 

回答

0

煤煙的維護者之一,讓我告訴你,你通常會得到煙塵郵件列表中更快的幫助,因爲不是所有我們可能看着StackOverflow。 Ondrej Lhotak可能可以幫助... ...

上下文敏感的分析通常非常昂貴。可能的解決方案是(1)做一個需求驅動的上下文敏感分析(Soot也支持它;檢查命令行選項),(2)構建你自己的手工指針抽象,或者(3)排除某些運行時來自分析的圖書館(這將是不健全的)。希望有幫助...

+0

非常感謝埃裏克。我會繼續前進,並將「cs-demand」設置爲真實以進行需求驅動分析。我在郵寄堆棧溢出之前2天將郵件發送給soot-list,但它仍在等待版主批准。 – user2037626

+0

嗨。我不清楚你的意思。煙塵清單通常不會受到審覈... – Eric

+1

在我將問題以電子郵件發送至[email protected]後,我收到了此電子郵件。您的郵件發送至'Soot-list'主題 「用於大型程序分析的槳」 正等待列表管理員審覈批准。 它正在舉行的原因: 發表非會員以會員制名單 要麼消息將能張貼到列表,或者您將收到主持人的決定 通知。如果您想取消 本貼子,請訪問以下URL:之後,我沒有收到電子郵件。 – user2037626