<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Eric and all,</div><div dir="ltr"><br></div><div dir="ltr">Thanks for the feedback. I got some success using a driver class although I encountered issues on the way. These issues stemmed <span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif">from my improper use of java packages. This github </span><a href="https://github.com/soot-oss/soot/issues/1346" rel="nofollow noreferrer" style="font-size:13px;margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;line-height:inherit;font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;vertical-align:baseline;box-sizing:inherit">issue</a><span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif"> was helpful as a reference (to ensure the package location was included in the classpath and the proper class naming was used).</span><div><div><span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif"><br></span></div><div><span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif"></span></div><div><span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif">I also found better progress using</span><span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif"> the basic way of setting the main class below, </span><span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif">instead of </span><span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif">using </span>setApplicationClass<span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif"> and </span>entrypoints in my prior excerpt (from the <a href="https://github.com/Sable/heros/wiki/Example%3A-Using-Heros-with-Soot">Soot Heros wiki</a>)</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">SootClass appclass = Scene.v().loadClassAndSupport(mainclass);<br>Scene.v().setMainClass(appclass);<br>Scene.v().loadNecessaryClasses();</blockquote><div><ol><li><font color="#242729" face="Arial, Helvetica Neue, Helvetica, sans-serif">However,  I am now running into this error during the statement "solver.solve();" which I would appreciate help with:<br></font>[Thread-11] ERROR heros.solver.CountingThreadPoolExecutor - Worker thread execution failed: null java.lang.NullPointerException<br><br></li><li>The reason I want to use Heros is because it will be able to follow/filter the call path based on the inputs from the driver class (interprocedural control flow graph). <span style="font-size:13px;color:rgb(36,39,41);font-family:Arial,"Helvetica Neue",Helvetica,sans-serif">I also wanted to clarify this because I can run without runtime errors with Soot and SPARK alone but it will give all the call edges it can find, rather than the path visited by the input. <br><br></span></li><li>Finally, I searched for examples that use Heros (since the wiki example does not include code to work with the IFDS solution) but did not have much luck. Any pointers to such examples will be much appreciated.</li></ol></div></div><div>Thanks,</div><div>Fogo</div><div><br></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 2, 2021 at 11:26 AM Eric Ortega <<a href="mailto:eortega@pjrcorp.com">eortega@pjrcorp.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="gmail-m_2224327143950114296WordSection1">
<p class="MsoNormal">Hi Fogo,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Yes, I meant the rest of the classes in the .jar.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">It sounds like Dr. Bodden was driving to a better point, in that there likely needs to be some sort of hook into the library.  If you didn’t want to create a sample app with a driver, you might have success programmatically setting a method
 that you’re curious about as an entrypoint through the soot API.  You can likely just use setEntryPoint() as you’ve already done.  It takes a list anyway so just pick some other methods in your libraries and tack them onto your main.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Regards,<u></u><u></u></p>
<p class="MsoNormal">Eric Ortega <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(181,196,223);padding:3pt 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12pt;color:black">From: </span></b><span style="font-size:12pt;color:black">Fogo Tunde-Onadele <<a href="mailto:oatundeo@ncsu.edu" target="_blank">oatundeo@ncsu.edu</a>><br>
<b>Date: </b>Tuesday, February 2, 2021 at 5:15 AM<br>
<b>To: </b>Eric Ortega <<a href="mailto:eortega@pjrcorp.com" target="_blank">eortega@pjrcorp.com</a>><br>
<b>Cc: </b>"<a href="mailto:soot-list@cs.mcgill.ca" target="_blank">soot-list@cs.mcgill.ca</a>" <<a href="mailto:soot-list@cs.mcgill.ca" target="_blank">soot-list@cs.mcgill.ca</a>><br>
<b>Subject: </b>Re: [Soot-list] Soot not finding class without a main for call graph<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">Hi Eric.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">Thanks, you mean the rest of the classes contained in the jar? I also received a response from Dr. Bodden about having a driver class that instantiates my target class. I'll work on trying these out.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thank you,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Fogo<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Feb 1, 2021 at 2:13 PM Eric Ortega <<a href="mailto:eortega@pjrcorp.com" target="_blank">eortega@pjrcorp.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">Hi Fogo,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">You may want to try running through the rest of your classes and calling Scene.v().loadClass(…) for each one.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Regards,<u></u><u></u></p>
<p class="MsoNormal">Eric Ortega<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(181,196,223);padding:3pt 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12pt;color:black">From:
</span></b><span style="font-size:12pt;color:black">Soot-list <<a href="mailto:soot-list-bounces@CS.McGill.CA" target="_blank">soot-list-bounces@CS.McGill.CA</a>> on behalf of Fogo Tunde-Onadele <<a href="mailto:oatundeo@ncsu.edu" target="_blank">oatundeo@ncsu.edu</a>><br>
<b>Date: </b>Monday, February 1, 2021 at 5:06 AM<br>
<b>To: </b>"<a href="mailto:soot-list@cs.mcgill.ca" target="_blank">soot-list@cs.mcgill.ca</a>" <<a href="mailto:soot-list@cs.mcgill.ca" target="_blank">soot-list@cs.mcgill.ca</a>><br>
<b>Subject: </b>[Soot-list] Soot not finding class without a main for call graph</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">Good day,</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">I have been trying to get Soot working on analyzing the call graph of external libraries/apps. Specifically, I want to get the call graph of a class, ‘DefaultServlet’, within a Tomcat
 jar file, ‘catalina.jar’. First, I followed tutorials that analyze a simple class/file with a main method. However, the classes I want to analyze don’t typically have main methods. So I found and followed examples that utilize entrypoints but Soot is still
 unable to find the class. Please, I would appreciate some help. Here is the latest main piece of code I have tried.</span><u></u><u></u></p>
<p style="margin-right:0in;margin-bottom:12pt;margin-left:0in">
<u></u> <u></u></p>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">```</span><u></u><u></u></p>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt">
<p class="MsoNormal">public class IFDSDataFlowTransformer extends SceneTransformer {<br>
    <br>
static LinkedList<String> excludeList;<br>
static String mainclass = "DefaultServlet";<br>
static String mainmethod = "doGet"; // "doPut";<br>
<br>
public static void main(String[] args) {<br>
<br>
// Set Soot's internal classpath<br>
   String javapath = System.getProperty("java.class.path");<br>
   String jredir = System.getProperty("java.home")+"/lib/rt.jar";<br>
   String path = javapath+File.pathSeparator+jredir;<br>
   Options.v().set_soot_classpath(path);<br>
<br>
        // Enable whole-program mode<br>
        Options.v().set_whole_program(true);<br>
        Options.v().set_app(true);<br>
<br>
        // Call-graph options<br>
        Options.v().setPhaseOption("cg", "safe-newinstance:true");<br>
        Options.v().setPhaseOption("cg.cha","enabled:false");<br>
<br>
        // Enable SPARK call-graph construction<br>
        Options.v().setPhaseOption("cg.spark","enabled:true");<br>
        Options.v().setPhaseOption("cg.spark","verbose:true");<br>
        Options.v().setPhaseOption("cg.spark","on-fly-cg:true");<br>
<br>
        Options.v().set_allow_phantom_refs(true);<br>
<br>
        // Set the main class of the application to be analysed<br>
        Options.v().set_main_class(mainclass);<br>
<br>
        // Load the main class<br>
        SootClass c = Scene.v().loadClass(mainclass, SootClass.BODIES);<br>
        c.setApplicationClass();<br>
<br>
        // Load the "main" method of the main class and set it as a Soot entry point<br>
//        SootMethod entryPoint = c.getMethodByName("main");<br>
        SootMethod entryPoint = c.getMethodByName(mainmethod);<br>
        List<SootMethod> entryPoints = new ArrayList<SootMethod>();<br>
        entryPoints.add(entryPoint);<br>
        Scene.v().setEntryPoints(entryPoints);<br>
        <br>
        PackManager.v().getPack("wjtp").add(new Transform("wjtp.herosifds", new IFDSDataFlowTransformer()));<br>
        <br>
//        soot.Main.main();<br>
        //start working<br>
   PackManager.v().runPacks();<br>
} <u></u><u></u></p>
</blockquote>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt">
<p class="MsoNormal"> <u></u><u></u></p>
</blockquote>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">```</span><u></u><u></u></p>
<p style="margin-right:0in;margin-bottom:12pt;margin-left:0in">
<u></u> <u></u></p>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">I am using Soot 3.3.1, Java 1.8 and I have exported my eclipse project in a zip below (project structure in photo). The files, IFDSDataFlowTransformer and TestSootCallGraph, start
 two separate trials. </span><u></u><u></u></p>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">Do I have to create a new class with a main that would start a request (e.g. http or curl request) to the Tomcat application? If so, that would require including more Tomcat jars/files
 in the project. However, I figured that Soot did not need specific inputs or </span>
all files in an application<span style="font-family:Arial,sans-serif;color:black"> to statically analyze code.
</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">Thank you,</span><u></u><u></u></p>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black">Fogo</span><u></u><u></u></p>
<p style="margin-right:0in;margin-bottom:12pt;margin-left:0in">
<u></u> <u></u></p>
<p style="margin:0in"><span style="font-family:Arial,sans-serif;color:black;border:1pt none windowtext;padding:0in"><img border="0" width="224" height="207" style="width: 2.3333in; height: 2.1562in;" id="gmail-m_2224327143950114296gmail-m_-4927084120254846701gmail-m_3743227930358435193_x005f_x0000_i1025" alt="Image removed by sender."></span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">--<u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="color:rgb(136,136,136)">Fogo Tunde-Onadele </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:rgb(136,136,136)">PhD student</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:rgb(136,136,136)">Computer Science</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:rgb(136,136,136)">North Carolina State University</span><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;color:rgb(136,136,136)">Fogo Tunde-Onadele<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;color:rgb(136,136,136)">PhD student<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;color:rgb(136,136,136)">Computer Science<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;color:rgb(136,136,136)">North Carolina State University<u></u><u></u></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><br style="color:rgb(136,136,136);font-size:12.8px"><div style="color:rgb(136,136,136);font-size:12.8px"><div dir="ltr"><div>Fogo Tunde-Onadele</div><div>PhD student</div><div>Computer Science</div><div>North Carolina State University</div></div></div></div></div></div></div></div></div>