2017-09-26 28 views
0

這裏是我的窗10命令shell中使用的命令:SOOT - CompilationDeathException(和幻象軍隊)

java 
-cp .\soot-2.5.0.jar soot.Main 
-cp ".;R:\...\OCLRuler\lib;C:\...\jdk1.8.0_144\bin" 
-pp -process-dir R:\...\OCLRuler\src\ 
-src-prec java 
-d R:\...\test\soot 
-allow-phantom-refs 
-main-class OCLRuler 

當我執行它,我得到以下的輸出:

Soot started on Tue Sep 26 13:28:32 EDT 2017 
Warning: java.dyn.InvokeDynamic is a phantom class! 
Warning: Main is a phantom class! 
Warning: MainMulti is a phantom class! 
Warning: oclruler.a_test.MainRawTesting is a phantom class! 
... all of them (100+ lines)... 
Warning: oclruler.utils.ToolBox is a phantom class! 
OCLRuler.java: Class "oclruler.genetics.EvaluatorOCL" not found. 
OCLRuler.java: Class "oclruler.genetics.EvaluatorOCL" not found. 
Exception in thread "main" soot.CompilationDeathException: Could not compile 
     at soot.javaToJimple.JavaToJimple.compile(JavaToJimple.java:104) 
     at soot.javaToJimple.InitialResolver.formAst(InitialResolver.java:117) 
     at soot.JavaClassSource.resolve(JavaClassSource.java:54) 
     at soot.SootResolver.bringToHierarchy(SootResolver.java:215) 
     at soot.SootResolver.bringToSignatures(SootResolver.java:239) 
     at soot.SootResolver.processResolveWorklist(SootResolver.java:154) 
     at soot.SootResolver.resolveClass(SootResolver.java:124) 
     at soot.Scene.loadClass(Scene.java:448) 
     at soot.Scene.loadClassAndSupport(Scene.java:433) 
     at soot.Scene.loadNecessaryClasses(Scene.java:1076) 
     at soot.Main.run(Main.java:167) 
     at soot.Main.main(Main.java:141) 

所有OCLRUler項目中使用的庫包含在OCLRUler/libOCLRuler/src中的所有源中。輸出目錄不是包含在煙塵目錄中的。此外,該項目確實編譯(我正在和它一起工作)。 .目錄包含所有soot/jasmin/heros罐。

儘管如此,所有的類都被認爲是幻影,並且菸灰編譯也很有幫助,因爲(我猜)它缺少這些類的實體。我的意思是「EvaluatorOCL」(即仍然猜測,CompilationDeathException的來源)是一個「Phantom class」。

怎麼了?

我應該在Soot的classpath中添加所有的軟件包嗎?

我試過各種命令行表達式 - 直到我徹底失去了。任何人都有關於此事的線索?

非常感謝。 愛德華

回答

0

改變了-pp -process-dir R:\...\OCLRuler\src\論據-pp -process-dir R:\...\OCLRuler\

,它似乎好工作......幽靈依然可以在周圍散步,但在輸出文件夾結果文件!

Oups,這是gona成爲一個新的問題...輸出文件是... EMPTY !!! 正如我所說,仍然存在有關幻影和輸出的警告,所有文件都會生成(java和類似)

它們爲什麼是空的?

0

這可能是Soot的源代碼前端的一個問題,現在已經嚴重過時了。我建議編譯.java文件到.class,然後將它們給予Soot。

+0

謝謝埃裏克。但是,使用bin文件夾(包含類文件)和'-src-prec class',我得到一個'RuntTimeException:無法加載CLassfile:oclruler.genetics.Oracle'這是一個現有的和編譯的文件 –

+0

我的項目旨在分析是在Java 8中。 –