<div dir="ltr"><div>To whom it may concern,<br></div><div><br></div><div>Hello, I am new to soot and currently I am trying to use spark to construct call graph. I have 4 questions and look forward to some replies. Thanks in advance.</div><div><br></div><div>1. </div><div>I did a tiny test, if I set cg.spark on with default options (i.e. on-fly-cg:true,rta:false,vta:false,etc...), I got a call graph size with size of 18. (I used &quot;-p cg.spark enabled&quot;)</div><div>Then If I set cg.spark to on-fly-cg:false,rta:true, the call graph suddenly exploded to size of 193543. How could this happen? I was wondering whether setting rta:true would implicitly change some other settings, which caused this explode problem? (I used &quot;-p cg.spark enabled,on-fly-cg:false,rta:true&quot;)</div><div><br></div><div>2.</div><div>I got an exception if I tried to set_no_bodies_for_excluded to true. Error message is:</div><div><br></div><div><div><span style="background-color:rgb(255,255,255)"><font color="#000000">Warning: java.dyn.InvokeDynamic is a phantom class!</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#000000">[Call Graph] For information on where the call graph may be incomplete, use the verbose option to the cg phase.</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#000000">[Spark] Pointer Assignment Graph in 0.1 seconds.</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000">Exception in thread &quot;main&quot; java.lang.RuntimeException: This operation requires resolving level HIERARCHY but sun.misc.ClassFileTransformer is at resolving level DANGLING</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000">If you are extending Soot, try to add the following call before calling soot.Main.main(..):</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000">Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY);</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000">Otherwise, try whole-program mode (-w).</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.SootClass.checkLevel(SootClass.java:125)</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.FastHierarchy.canStoreClass(FastHierarchy.java:280)</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.FastHierarchy.canStoreType(FastHierarchy.java:215)</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.FastHierarchy.canStoreType(FastHierarchy.java:261)</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.jimple.spark.internal.TypeManager.castNeverFails(TypeManager.java:113)</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.jimple.spark.internal.TypeManager.makeTypeMask(TypeManager.java:92)</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:91)</font></span></div><div><span style="background-color:rgb(255,255,255)"><font color="#ff0000"><span class="" style="white-space:pre">        </span>at soot.SceneTransformer.transform(SceneTransformer.java:39)</font></span></div><div><font color="#ff0000">......</font></div></div><div><br></div><div>Here is part of my settings, I have already set to whole program mode. </div><div><div><span class="" style="white-space:pre">                </span>Options.v().set_whole_program(true);</div><div><span class="" style="white-space:pre">                </span>Options.v().set_allow_phantom_refs(true);</div><div><span class="" style="white-space:pre">                </span>Options.v().set_no_bodies_for_excluded(true);</div><div><span class="" style="white-space:pre">                </span>Scene.v().loadNecessaryClasses();</div><div><br></div><div>3.</div><div>And another question to be clear, as I observed, the library classes are excluded from transformation by default, right? It seems that I don&#39;t need to set_exclude for library classes. </div><div><br></div><div>4.</div><div>Last question, as I referred to the API from <a href="https://ssebuild.cased.de/nightly/soot/javadoc/">https://ssebuild.cased.de/nightly/soot/javadoc/</a>, it seems that sometimes methods described in this javadoc don&#39;t exist?<br></div><div>Same situation for the soot command line options document from <a href="https://ssebuild.cased.de/nightly/soot/doc/soot_options.htm">https://ssebuild.cased.de/nightly/soot/doc/soot_options.htm</a>, sometimes, although very rare, options could be invalid? (eg. on-the-fly?)</div><div>I am wondering where could I search for up-to-date documents?</div><div><br></div><div>Thank you for your patience. I am looking forward to your reply. <br></div><div><br></div><div style="font-family:Tahoma;font-size:13px"><span style="color:rgb(0,0,0)">Best regards,</span><div style="color:rgb(0,0,0)">Grace</div><div><br></div></div></div></div>