[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