[Soot-list] Error Compiling a java file using JavaToJimple SOOT API

Shahid Alam shalam3 at gmail.com
Wed May 23 02:12:00 EDT 2018


----------------------------------------------
HERE IS MY CODE:
----------------------------------------------

         .   .   .   .   .
         .   .   .   .   .
         initializeSoot(false, JavaLibs, androidJars, applicationAPK);

         polyglot.frontend.Compiler compiler = null;
         polyglot.ast.Node astNode;  // source node
         JavaToJimple jtj = new JavaToJimple();
         List<String> locations = new ArrayList<String>();
         String filename = "test.java";
//----------------------------------------------
         // ?????????????
         // locations = ??????????
         // I have also tried other options but same error.
         // I AM NOT SURE WHAT THESE LOCATIONS ARE. SEEMS LIKE LOCATION 
FOR SOURCES. BUT I AM
         // ALREADY GIVING LOCATION OF ONE SOURCE FILE TEST.JAVA.
         // I have tried the location of test.java file, location of 
Java rt.jar file . . . ???????
         // ?????????????
//----------------------------------------------
         locations.add("test.class");
         polyglot.frontend.ExtensionInfo extInfo = 
jtj.initExtInfo(filename, locations);
         compiler = new polyglot.frontend.Compiler(extInfo);
         Report.addTopic(Report.frontend, 7);
         Report.addTopic(Report.errors, 7);
         Report.addTopic(Report.loader, 7);
         Report.addTopic(Report.resolver, 7);
         Report.addTopic(Report.time, 7);
         Report.addTopic(Report.visit, 7);
         Report.addTopic(Report.dataflow, 7);
         Report.addTopic(Report.imports, 7);
         Report.addTopic(Report.types, 7);
         Report.addTopic(Report.verbose, 7);
         astNode = jtj.compile(compiler, filename, extInfo);
         .   .   .   .   .
         .   .   .   .   .

     private void initializeSoot(boolean constructCallgraph, String 
JavaLibs, String androidJars, String applicationAPK)
     {
         soot.G.reset();

         Options.v().set_no_bodies_for_excluded(true);
Options.v().set_force_overwrite(true); // overwrite files
         Options.v().set_allow_phantom_refs(true);
         Options.v().set_output_format(Options.output_format_dex);
         Options.v().set_whole_program(true);
Options.v().set_process_dir(Collections.singletonList(applicationAPK)); 
// process dir
         Options.v().set_android_jars(androidJars);

Options.v().set_src_prec(Options.src_prec_apk); // prefer APK files
         Options.v().set_keep_line_number(false);
         Options.v().set_keep_offset(false);
         Options.v().set_throw_analysis(3);
         Options.v().set_prepend_classpath(true);

         String classpath = Scene.v().getAndroidJarPath(androidJars, 
applicationAPK);
         Options.v().set_soot_classpath(JavaLibs + ";" + classpath);
         Options.v().set_soot_classpath(classpath);
         Main.v().autoSetOptions();

         if (constructCallgraph)
         {
             switch (1)
             {
                 case 1: // AutomaticSelection
                 case 2: // SPARK
                     Options.v().setPhaseOption("cg.spark", "on");
                     break;
                 case 3: // GEOM
                     Options.v().setPhaseOption("cg.spark", "on");
                     AbstractInfoflow.setGeomPtaSpecificOptions();
                     break;
                 case 4: // CHA
                     Options.v().setPhaseOption("cg.cha", "on");
                     break;
                 case 5: // RTA
                     Options.v().setPhaseOption("cg.spark", "on");
                     Options.v().setPhaseOption("cg.spark", "rta:true");
                     Options.v().setPhaseOption("cg.spark", 
"on-fly-cg:false");
                     break;
                 case 6: // VTA
                     Options.v().setPhaseOption("cg.spark", "on");
                     Options.v().setPhaseOption("cg.spark", "vta:true");
                     break;
                 default:
                     throw new RuntimeException("Invalid callgraph 
algorithm");
             }
         }
         Scene.v().loadNecessaryClasses();
     }

----------------------------------------------
HERE IS THE ERROR I AM GETTING:
----------------------------------------------

     Adding job for test.java at the request of job null
Running job test.java (before parse(test.java))
Running test.java (before parse(test.java)) to pass 
soot.javaToJimple.SaveASTVisitor:save-ast
Trying to run pass parse(test.java) in test.java (before parse(test.java))
   Using parser CupParser(polyglot.ext.jl.parse.Grm)
   Finished parse(test.java) status=done inclusive_time=60 exclusive_time=60
Trying to run pass build-types in test.java (before build-types)
     Running (TB null) on <<<< test.java >>>>
     TableCR.addNamed(test, test)
     looking in . for test
     looking in XYZ.jar for test
   Opening zip XYZ.jar
     looking in ..\lib\rt.jar for test
   Opening zip ..\lib\rt.jar
     looking in ..\lib\sootclasses-trunk-jar-with-dependencies.jar for test
   Opening zip ..\lib\sootclasses-trunk-jar-with-dependencies.jar
     looking in C:\Program Files\Java\jre1.8.0_131\lib\resources.jar for 
test
   Opening zip C:\Program Files\Java\jre1.8.0_131\lib\resources.jar
     looking in C:\Program Files\Java\jre1.8.0_131\lib\rt.jar for test
   Opening zip C:\Program Files\Java\jre1.8.0_131\lib\rt.jar
     looking in C:\Program Files\Java\jre1.8.0_131\lib\sunrsasign.jar 
for test
     looking in C:\Program Files\Java\jre1.8.0_131\lib\jsse.jar for test
   Opening zip C:\Program Files\Java\jre1.8.0_131\lib\jsse.jar
     looking in C:\Program Files\Java\jre1.8.0_131\lib\jce.jar for test
   Opening zip C:\Program Files\Java\jre1.8.0_131\lib\jce.jar
     looking in C:\Program Files\Java\jre1.8.0_131\lib\charsets.jar for test
   Opening zip C:\Program Files\Java\jre1.8.0_131\lib\charsets.jar
     looking in C:\Program Files\Java\jre1.8.0_131\lib\jfr.jar for test
   Opening zip C:\Program Files\Java\jre1.8.0_131\lib\jfr.jar
     looking in C:\Program Files\Java\jre1.8.0_131\classes for test
     looking in ..\android-jar\android-8\android.jar for test
   Opening zip ..\android-jar\android-8\android.jar
       TB pushing class test: (TB null)
   (import test.java): lazy import test
       TB pushing code: (TB test (TB null))
   CachingResolver: find: java.lang.Object
     CachingResolver: not cached: java.lang.Object
     TableCR.find(java.lang.Object)
polyglot.types.NoClassException: Class "java.lang.Object" not found.
         at polyglot.types.TableResolver.find(TableResolver.java:67)
         at polyglot.types.CompoundResolver.find(CompoundResolver.java:41)
         at polyglot.types.CachingResolver.find(CachingResolver.java:104)
         at 
polyglot.ext.jl.types.TypeSystem_c.forName(TypeSystem_c.java:1328)
         at 
polyglot.ext.jl.types.TypeSystem_c.typeForName(TypeSystem_c.java:1351)
         at polyglot.ext.jl.types.TypeSystem_c.load(TypeSystem_c.java:1317)
         at 
polyglot.ext.jl.types.TypeSystem_c.Object(TypeSystem_c.java:1360)
         at 
polyglot.ext.jl.ast.MethodDecl_c.buildTypes(MethodDecl_c.java:172)
         at polyglot.visit.TypeBuilder.leave(TypeBuilder.java:127)
         at polyglot.visit.NodeVisitor.leave(NodeVisitor.java:134)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:223)
         at polyglot.ext.jl.ast.Node_c.visitChild(Node_c.java:140)
         at polyglot.ext.jl.ast.Node_c.visitList(Node_c.java:197)
         at 
polyglot.ext.jl.ast.ClassBody_c.visitChildren(ClassBody_c.java:61)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:216)
         at polyglot.ext.jl.ast.Node_c.visitChild(Node_c.java:140)
         at 
polyglot.ext.jl.ast.ClassDecl_c.visitChildren(ClassDecl_c.java:137)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:216)
         at polyglot.ext.jl.ast.Node_c.visitChild(Node_c.java:140)
         at polyglot.ext.jl.ast.Node_c.visitList(Node_c.java:197)
         at 
polyglot.ext.jl.ast.SourceFile_c.visitChildren(SourceFile_c.java:108)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:216)
         at polyglot.ext.jl.ast.Node_c.visit(Node_c.java:144)
         at polyglot.frontend.VisitorPass.run(VisitorPass.java:48)
         at 
polyglot.frontend.AbstractExtensionInfo.runPass(AbstractExtensionInfo.java:308)
         at 
polyglot.frontend.AbstractExtensionInfo.runToPass(AbstractExtensionInfo.java:228)
         at 
polyglot.frontend.AbstractExtensionInfo.runAllPasses(AbstractExtensionInfo.java:195)
         at 
polyglot.frontend.AbstractExtensionInfo.runToCompletion(AbstractExtensionInfo.java:110)
         at soot.javaToJimple.JavaToJimple.compile(JavaToJimple.java:115)
         at XYZ.ABC.<init>(ABC.java:113)
         at XYZ.main.main(main.java:20)
     SourceCR.find(java.lang.Object)
   attempting to load class java.lang.Object
   classpath = [., XYZ.jar, ..\lib\rt.jar, 
..\lib\sootclasses-trunk-jar-with-dependencies.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\resources.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\rt.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\sunrsasign.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\jsse.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\jce.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\charsets.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\jfr.jar, C:\Program 
Files\Java\jre1.8.0_131\classes, ..\android-jar\android-8\android.jar]
     looking in . for java\lang\Object.class
     looking in XYZ.jar for java\lang\Object.class
   Looking for java/lang/Object.class in XYZ.jar
     looking in ..\lib\rt.jar for java\lang\Object.class
   Looking for java/lang/Object.class in ..\lib\rt.jar
     found zip entry java/lang/Object.class
     defining class java/lang/Object.class
       Class java.lang.Object found in classpath [., XYZ.jar, 
..\lib\rt.jar, ..\lib\sootclasses-trunk-jar-with-dependencies.jar, 
C:\Program Files\Java\jre1.8.0_131\lib\resources.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\rt.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\sunrsasign.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\jsse.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\jce.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\charsets.jar, C:\Program 
Files\Java\jre1.8.0_131\lib\jfr.jar, C:\Program 
Files\Java\jre1.8.0_131\classes, ..\android-jar\android-8\android.jar]
Exception in thread "main" java.lang.NullPointerException
         at 
polyglot.frontend.SourceLoader.classSource(SourceLoader.java:151)
         at 
polyglot.types.SourceClassResolver.find(SourceClassResolver.java:140)
         at polyglot.types.CompoundResolver.find(CompoundResolver.java:44)
         at polyglot.types.CachingResolver.find(CachingResolver.java:104)
         at 
polyglot.ext.jl.types.TypeSystem_c.forName(TypeSystem_c.java:1328)
         at 
polyglot.ext.jl.types.TypeSystem_c.typeForName(TypeSystem_c.java:1351)
         at polyglot.ext.jl.types.TypeSystem_c.load(TypeSystem_c.java:1317)
         at 
polyglot.ext.jl.types.TypeSystem_c.Object(TypeSystem_c.java:1360)
         at 
polyglot.ext.jl.ast.MethodDecl_c.buildTypes(MethodDecl_c.java:172)
         at polyglot.visit.TypeBuilder.leave(TypeBuilder.java:127)
         at polyglot.visit.NodeVisitor.leave(NodeVisitor.java:134)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:223)
         at polyglot.ext.jl.ast.Node_c.visitChild(Node_c.java:140)
         at polyglot.ext.jl.ast.Node_c.visitList(Node_c.java:197)
         at 
polyglot.ext.jl.ast.ClassBody_c.visitChildren(ClassBody_c.java:61)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:216)
         at polyglot.ext.jl.ast.Node_c.visitChild(Node_c.java:140)
         at 
polyglot.ext.jl.ast.ClassDecl_c.visitChildren(ClassDecl_c.java:137)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:216)
         at polyglot.ext.jl.ast.Node_c.visitChild(Node_c.java:140)
         at polyglot.ext.jl.ast.Node_c.visitList(Node_c.java:197)
         at 
polyglot.ext.jl.ast.SourceFile_c.visitChildren(SourceFile_c.java:108)
         at polyglot.visit.NodeVisitor.visitEdge(NodeVisitor.java:216)
         at polyglot.ext.jl.ast.Node_c.visit(Node_c.java:144)
         at polyglot.frontend.VisitorPass.run(VisitorPass.java:48)
         at 
polyglot.frontend.AbstractExtensionInfo.runPass(AbstractExtensionInfo.java:308)
         at 
polyglot.frontend.AbstractExtensionInfo.runToPass(AbstractExtensionInfo.java:228)
         at 
polyglot.frontend.AbstractExtensionInfo.runAllPasses(AbstractExtensionInfo.java:195)
         at 
polyglot.frontend.AbstractExtensionInfo.runToCompletion(AbstractExtensionInfo.java:110)
         at soot.javaToJimple.JavaToJimple.compile(JavaToJimple.java:115)
         at XYZ.ABC.<init>(ABC.java:113)
         at XYZ.main.main(main.java:20)

Thanks,
-- Shahid



More information about the Soot-list mailing list