<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Andreas, thank you very much for your reply!<div class=""><br class=""></div><div class="">I tried it again. Unfortunately, it doesn’t work. </div><div class=""><br class=""></div><div class="">My case is following. Could you please give me an example at JDK >=9? thank you.</div><div class=""><br class=""></div><div class=""><div style="color: rgb(51, 51, 51); background-color: rgb(253, 246, 227); font-family: Menlo, Monaco, "Courier New", monospace; line-height: 18px; white-space: pre;" class=""><div class=""><span style="color: #073642;font-weight: bold;" class="">public</span> <span style="color: #073642;font-weight: bold;" class="">static</span> <span style="color: #073642;font-weight: bold;" class="">void</span> <span style="color: #268bd2;" class="">main</span>(<span style="color: #268bd2;font-weight: bold;" class="">String</span>[] args) {</div><br class=""><div class=""> <span style="color: #268bd2;font-weight: bold;" class="">String</span> <span style="color: #268bd2;" class="">classesDir</span> <span style="color: #859900;" class="">=</span> <span style="color: #2aa198;" class="">"/Users/liuyuan/Workspaces/testCFGbySoot/testCFGbySoot/target/classes/"</span>;</div><div class=""> <span style="color: #268bd2;font-weight: bold;" class="">String</span> <span style="color: #268bd2;" class="">mainClass</span> <span style="color: #859900;" class="">=</span> <span style="color: #2aa198;" class="">"org.yliu.test.soot.APP"</span>;</div><div class=""> <span style="color: #268bd2;font-weight: bold;" class="">TypeReferenceSequencesSolver</span> <span style="color: #268bd2;" class="">analysis</span> <span style="color: #859900;" class="">=</span> <span style="color: #859900;" class="">new</span> <span style="color: #268bd2;" class="">TypeReferenceSequencesSolver</span>();</div><div class=""> <span style="color: #93a1a1;font-style: italic;" class="">//Options.v().set_prepend_classpath(true);</span></div><div class=""> <span style="color: #268bd2;" class="">PackManager</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">getPack</span>(<span style="color: #2aa198;" class="">"wjtp"</span>).<span style="color: #268bd2;" class="">add</span>(<span style="color: #859900;" class="">new</span> <span style="color: #268bd2;" class="">Transform</span>(<span style="color: #2aa198;" class="">"wjtp.TypeReferenceSequencesSolver"</span>, <span style="color: #268bd2;" class="">analysis</span>));</div><div class=""> <span style="color: #268bd2;font-weight: bold;" class="">String</span> <span style="color: #268bd2;" class="">jmodsPath</span> <span style="color: #859900;" class="">=</span> <span style="color: #2aa198;" class="">"/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home/jmods"</span>;</div><div class=""> <span style="color: #268bd2;" class="">Options</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">set_soot_classpath</span>(<span style="color: #2aa198;" class="">"VIRTUAL_FS_FOR_JDK"</span> <span style="color: #859900;" class="">+</span> <span style="color: #268bd2;" class="">File</span>.<span style="color: #268bd2;" class="">pathSeparator</span> <span style="color: #859900;" class="">+</span> <span style="color: #268bd2;" class="">jmodsPath</span>);</div><br class=""><div class=""> <span style="color: #268bd2;" class="">Options</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">set_process_dir</span>(<span style="color: #268bd2;" class="">Arrays</span>.<span style="color: #268bd2;" class="">asList</span>(<span style="color: #268bd2;" class="">classesDir</span>));</div><div class=""> <span style="color: #268bd2;" class="">Options</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">set_whole_program</span>(<span style="color: #b58900;" class="">false</span>);</div><div class=""> <span style="color: #268bd2;" class="">Options</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">setPhaseOption</span>(<span style="color: #2aa198;" class="">"jb"</span>, <span style="color: #2aa198;" class="">"preserve-source-annotations:true"</span>);</div><div class=""> <span style="color: #268bd2;" class="">Options</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">setPhaseOption</span>(<span style="color: #2aa198;" class="">"jj"</span>, <span style="color: #2aa198;" class="">"use-original-names:true"</span>);</div><div class=""> <span style="color: #268bd2;" class="">Options</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">set_keep_line_number</span>(<span style="color: #b58900;" class="">true</span>);</div><br class=""><div class=""> <span style="color: #268bd2;font-weight: bold;" class="">SootClass</span> <span style="color: #268bd2;" class="">appclass</span> <span style="color: #859900;" class="">=</span> <span style="color: #268bd2;" class="">Scene</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">loadClassAndSupport</span>(<span style="color: #268bd2;" class="">mainClass</span>);</div><div class=""> <span style="color: #268bd2;" class="">Scene</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">setMainClass</span>(<span style="color: #268bd2;" class="">appclass</span>);</div><div class=""> <span style="color: #268bd2;" class="">Scene</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">loadNecessaryClasses</span>();</div><br class=""><div class=""> <span style="color: #268bd2;" class="">PackManager</span>.<span style="color: #268bd2;" class="">v</span>().<span style="color: #268bd2;" class="">runPacks</span>();</div><div class=""> }</div></div></div><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">2021年3月14日 06:20,Andreas Peter Dann <<a href="mailto:adann@mail.uni-paderborn.de" class="">adann@mail.uni-paderborn.de</a>> 写道:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hi Yuan,<br class=""><br class="">thanks for your question. Unfortunately, the current documentation is not very clear on that topic because only a few people used Soot to analyze ByteCode for Java Version >= 9.<br class="">At the end of the readme in the repo you'll find paragraph explaining how to run soot with Java >=9<br class=""><a href="https://github.com/soot-oss/soot" class="">https://github.com/soot-oss/soot</a><br class=""><br class="">In a nutshell,<br class="">- please use the latest version from Maven Central https://soot-oss.github.io/soot/<br class="">- run soot with a JDK >= 8 (maybe it works with an older JDK but I've never tested it)<br class="">- if you want to run soot on JDK 8 but want to analyze the ByteCode of Java >=9 please run <br class=""><br class="">java -cp soot-trunk.jar soot.Main -cp VIRTUAL_FS_FOR_JDK<br class=""><br class="">the string VIRTUAL_FS_FOR_JDK tells Soot to look into the virtual file system of JDKs >=9 to find the base classes.<br class=""><br class="">Please feel free to improve the current documentation by making a pull request.<br class=""><br class="">Best,<br class=""><br class="">Andreas<br class="">---------<br class=""><br class="">Am 12.03.21, 01:20 schrieb "Soot-list im Auftrag von Liu Yuan" <soot-list-bounces@CS.McGill.CA im Auftrag von liuyuan@fastmail.com>:<br class=""><br class=""> Hi, I have JDK16 installed, and using the following to create a CFG.<br class=""><br class=""> But I get an exception Unsupported class file major version 60, for SootClass appclass = Scene.v().loadClassAndSupport(mainClass);<br class=""><br class=""> I think soot can run in JDK 16, so the reason is that the class files to be analyzed is compied at a high JDK version.<br class=""><br class=""> So is there any method to solve it? If not, what is the supported scope of the JDK compiled version for the class files? <br class=""><br class=""> Besides, JDK 9+ remove the rt.jar and ice.jar. After searching, I learned that I only need to set prepend_classpat to load the necessary classes for soot to run. I don't know if it is correct. <br class=""><br class=""> Any suggestion is appreciated, thank you.<br class=""><br class=""> public static void main(String[] args) {<br class=""><br class=""> String classesDir = "./input/dataset/tracker-server.jar";<br class=""> String mainClass = "org.traccar.Main";<br class=""> TypeReferenceSequencesSolver analysis = new TypeReferenceSequencesSolver();<br class=""> Options.v().set_prepend_classpath(true);<br class=""> PackManager.v().getPack("wjtp").add(new Transform("wjtp.TypeReferenceSequencesSolver", analysis));<br class=""><br class=""> Options.v().set_process_dir(Arrays.asList(classesDir));<br class=""> Options.v().set_whole_program(false);<br class=""> Options.v().setPhaseOption("jb", "preserve-source-annotations:true");<br class=""> Options.v().setPhaseOption("jj", "use-original-names:true");<br class=""> Options.v().set_keep_line_number(true);<br class=""><br class=""> SootClass appclass = Scene.v().loadClassAndSupport(mainClass);<br class=""> Scene.v().setMainClass(appclass);<br class=""> Scene.v().loadNecessaryClasses();<br class=""><br class=""> PackManager.v().runPacks();<br class=""> }<br class=""><br class=""> Best,<br class=""> Yuan<br class=""> _______________________________________________<br class=""> Soot-list mailing list<br class=""> Soot-list@CS.McGill.CA<br class=""> https://mailman.CS.McGill.CA/mailman/listinfo/soot-list<br class=""><br class=""></div></div></blockquote></div><br class=""></div></body></html>