soot-oss / soot

Soot - A Java optimization framework
GNU Lesser General Public License v2.1
2.86k stars 707 forks source link

Exceptions when using soot and tamiflex to analysis dacapo benchmarks(urgent) #647

Closed Roy-NJU closed 4 years ago

Roy-NJU commented 7 years ago

I use jdk 8 and soot.2.5.0. When I use poa-2.0.1.jar to perform the step 1, it works ok. And when I use soot to analysis the bytecode, many exceptions occur.

Starting from Soot's class library: soot.Main --d C:\Users\tmks\workspace\Benchmark\sootOutput --include-all --cp /C:/Program%20Files/Java/jre1.8.0_101/lib/charsets.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/access-bridge-64.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/sunmscapi.jar;/F:/eclipse-standard-kepler-SR1-win32-x86_64/eclipse/plugins/ca.mcgill.sable.soot.lib_2.5.2/lib/java_cup.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/jfxrt.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/zipfs.jar;/F:/poa-2.0.1.jar;/C:/Users/tmks/workspace/Benchmark/bin/;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/nashorn.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/resources.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/jfr.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/sunjce_provider.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/rt.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/cldrdata.jar;/F:/pia-2.0.1.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/jce.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/localedata.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/sunec.jar;/F:/Benchmark/src;/F:/eclipse-standard-kepler-SR1-win32-x86_64/eclipse/plugins/ca.mcgill.sable.soot.lib_2.5.2/lib/jasminclasses.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/dnsns.jar;/F:/dacapo-9.12-bach.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/jaccess.jar;/F:/eclipse-standard-kepler-SR1-win32-x86_64/eclipse/plugins/org.apache.ant_1.8.4.v201303080030/lib/ant.jar;/F:/eclipse-standard-kepler-SR1-win32-x86_64/eclipse/plugins/ca.mcgill.sable.soot.lib_2.5.2/lib/polyglot.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/ext/sunpkcs11.jar;/C:/Program%20Files/Java/jre1.8.0_101/lib/jsse.jar;;F:\dacapo-9.12-bach.jar;C:\Program Files\Java\jre1.8.0_101\lib\resources.jar;C:\Program Files\Java\jre1.8.0_101\lib\rt.jar;C:\Program Files\Java\jre1.8.0_101\lib\jsse.jar;C:\Program Files\Java\jre1.8.0_101\lib\jce.jar;C:\Program Files\Java\jre1.8.0_101\lib\charsets.jar;C:\Program Files\Java\jre1.8.0_101\lib\jfr.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\cldrdata.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\dnsns.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\jaccess.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\jfxrt.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\localedata.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\nashorn.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\sunec.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\sunmscapi.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jre1.8.0_101\lib\ext\zipfs.jar;F:\eclipse-standard-kepler-SR1-win32-x86_64\eclipse\plugins\ca.mcgill.sable.soot.lib_2.5.2\lib\jasminclasses.jar;F:\eclipse-standard-kepler-SR1-win32-x86_64\eclipse\plugins\ca.mcgill.sable.soot.lib_2.5.2\lib\java_cup.jar;F:\eclipse-standard-kepler-SR1-win32-x86_64\eclipse\plugins\ca.mcgill.sable.soot.lib_2.5.2\lib\polyglot.jar;F:\poa-2.0.1.jar;F:\pia-2.0.1.jar;F:\eclipse-standard-kepler-SR1-win32-x86_64\eclipse\plugins\org.apache.ant_1.8.4.v201303080030\lib\ant.jar --p cg reflection-log:C:\Users\tmks\workspace\Benchmark\out\refl.log --xml-attributes --main-class org.dacapo.harness.Harness org.dacapo.harness.Avrora Soot started on Mon Sep 26 16:46:53 CST 2016 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at ca.mcgill.sable.soot.launching.SootThread.run(SootThread.java:138) Caused by: java.lang.RuntimeException: Line: 'Class.getDeclaredField;;java.lang.invoke.MethodHandle.;;isAccessible=false;' at soot.Scene.addReflectionTraceClasses(Scene.java:1034) at soot.Scene.loadBasicClasses(Scene.java:986) at soot.Scene.loadNecessaryClasses(Scene.java:1061) at soot.Main.run(Main.java:167) at soot.Main.main(Main.java:141) ... 5 more Caused by: java.lang.RuntimeException: Unknown entry kind: Class.getDeclaredField at soot.Scene.addReflectionTraceClasses(Scene.java:1031) ... 9 more How can I solve this problem? Please help me! Thanks a lot!

Roy Department of Computer Science and Technology Nanjing University

sridhargopinath commented 7 years ago

All the transformations supported by Tamiflex are not currently handled by Soot. The transformations supported are as follows: Class.forName Class.newInstance Constructor.newInstance Method.invoke Field.set Field.get

Modify the poa.properties file to include only the above transformations. This will get rid of the exception.

Roy-NJU commented 7 years ago

Dear gsridhar53: Thanks your reply. I have modified the poa.properties file, but the exceptions remain: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at ca.mcgill.sable.soot.launching.SootThread.run(SootThread.java:138) Caused by: java.lang.RuntimeException: Line: 'Class.getMethod;<Harness: void main(java.lang.String[])>;sun.launcher.LauncherHelper.validateMainClass;;isAccessible=false;' at soot.Scene.addReflectionTraceClasses(Scene.java:1034) at soot.Scene.loadBasicClasses(Scene.java:986) at soot.Scene.loadNecessaryClasses(Scene.java:1061) at soot.Main.run(Main.java:167) at soot.Main.main(Main.java:141) ... 5 more Caused by: java.lang.RuntimeException: Unknown entry kind: Class.getMethod at soot.Scene.addReflectionTraceClasses(Scene.java:1031) ... 9 more Roy Department of Computer Science and Technology Nanjing University

sridhargopinath commented 7 years ago

Use this:

poa.properties.txt

Roy-NJU commented 7 years ago

Hi gsridhar53 : I used your poa file, but the problems remain.

Roy Department of Computer Science and Technology Nanjing University

SnowOnion commented 7 years ago

I used @gsridhar53 's poa.properties.txt then my similar problem was solved!

@Roy-NJU did you (1.) Put @gsridhar53's poa.properties to <user home directory>\.tamiflex\ and (2.) Rerun the step 1 in https://github.com/secure-software-engineering/tamiflex/wiki/DaCapoAndSoot ? By <user home directory> I mean what System.out.println(System.getProperty("user.home")); prints, e.g. C:\Users\admin.

@Roy-NJU please email me or contact QQ 415300195 for 中文 discussion...

Roy-NJU commented 7 years ago

@gsridhar53 @SnowOnion Thanks. I used gsridhar53's poa.properies.txt and many of the class can be analysed. But some classes such as DacapoException can not be analysed and report the followings: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at ca.mcgill.sable.soot.launching.SootThread.run(SootThread.java:138) Caused by: java.lang.RuntimeException: Main-class has no main method! at soot.Scene.setMainClass(Scene.java:146) at soot.Scene.setMainClassFromOptions(Scene.java:1227) at soot.Scene.hasMainClass(Scene.java:175) at soot.EntryPoints.application(EntryPoints.java:65) at soot.EntryPoints.all(EntryPoints.java:96) at soot.Scene.getEntryPoints(Scene.java:711) at soot.Scene.getReachableMethods(Scene.java:758) at soot.jimple.spark.solver.OnFlyCallGraph.(OnFlyCallGraph.java:49) at soot.jimple.spark.builder.ContextInsensitiveBuilder.setup(ContextInsensitiveBuilder.java:65) at soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:83) at soot.SceneTransformer.transform(SceneTransformer.java:39) at soot.Transform.apply(Transform.java:89) at soot.RadioScenePack.internalApply(RadioScenePack.java:57) at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:49) at soot.Pack.apply(Pack.java:114) at soot.PackManager.runWholeProgramPacks(PackManager.java:417) at soot.PackManager.runPacks(PackManager.java:336) at soot.Main.run(Main.java:198) at soot.Main.main(Main.java:141) ... 5 more And I use Spark to pointer analysis, where is the pointer assignment graph stored.

pavanupb commented 4 years ago

@Roy-NJU Please re-open the issue if this is still relevant.