<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi everyone,<div class=""><br class=""></div><div class="">I’m working on evaluating different API-misuse detectors on a benchmark dataset we recently published [1]. I have some detectors that work on Bytecode, which I don’t have for the projects in my dataset. Since compiling all the projects manually is impractical, I was thinking that maybe I can use Soot as a compiler, reading the sources and writing corresponding .class-Files (using the phantom-class option).</div><div class=""><br class=""></div><div class="">I use the following script to test this:</div><div class=""><div class=""></div><blockquote type="cite" class=""><div class="">JDK=/usr/lib/jvm/java-7-oracle/jre/lib/rt.jar</div><div class=""><br class=""></div></blockquote><blockquote type="cite" class="">rm -rf jmrtd/</blockquote><blockquote type="cite" class=""><div class="">svn checkout <a href="http://svn.code.sf.net/p/jmrtd/code/passporthostapi/@51" class="">http://svn.code.sf.net/p/jmrtd/code/passporthostapi/@51</a> jmrtd</div><div class="">INPUT=jmrtd/src/</div><div class="">OUTPUT=jmrtd/bin/</div><div class=""><br class=""></div><div class="">java -jar soot-2.5.0.jar -process-dir ${INPUT} -cp ${JDK} -include-all -src-prec java -d ${OUTPUT} -f class -v -allow-phantom-refs</div></blockquote></div><div class=""><br class=""></div><div class="">Soot is finding all the Java files and creates corresponding .class files, but all these files contain just empty classes, i.e. “class <Name> {}”. (Soot output below)</div><div class="">I get the same results with both Java 7 and 8.</div><div class=""><br class=""></div><div class="">My questions now are:</div><div class="">1) Is what I’m trying to do possible at all?</div><div class="">2) If so, what am I doing wrong?</div><div class=""><br class=""></div><div class="">Thank you very much!</div><div class="">Best, Sven</div><div class=""><br class=""></div><div class="">[1] <a href="https://github.com/stg-tud/MUBench/tree/MSR16" class="">https://github.com/stg-tud/MUBench/tree/MSR16</a></div><div class=""><br class=""></div><div class="">—</div><div class="">Soot output to the above script:</div><div class=""><br class=""></div><div class=""><div class="">Soot started on Thu May 12 18:10:35 CEST 2016</div><div class="">resolving [from .class]: java.lang.Throwable</div><div class="">resolving [from .class]: java.lang.Object</div><div class="">resolving [from .class]: java.io.Serializable</div><div class="">resolving [from .class]: java.lang.String</div><div class="">resolving [from .class]: java.lang.StackTraceElement</div><div class="">resolving [from .class]: java.util.List</div><div class="">resolving [from .class]: java.io.PrintStream</div><div class="">resolving [from .class]: java.lang.Throwable$PrintStreamOrWriter</div><div class="">resolving [from .class]: java.util.Set</div><div class="">resolving [from .class]: java.io.PrintWriter</div><div class="">resolving [from .class]: java.io.ObjectInputStream</div><div class="">resolving [from .class]: java.io.IOException</div><div class="">resolving [from .class]: java.lang.ClassNotFoundException</div><div class="">resolving [from .class]: java.io.ObjectOutputStream</div><div class="">resolving [from .class]: java.lang.Class</div><div class="">resolving [from .class]: java.lang.CloneNotSupportedException</div><div class="">resolving [from .class]: java.lang.InterruptedException</div><div class="">resolving [from .class]: java.lang.Comparable</div><div class="">resolving [from .class]: java.lang.CharSequence</div><div class="">resolving [from .class]: java.util.Collection</div><div class="">resolving [from .class]: java.io.FilterOutputStream</div><div class="">resolving [from .class]: java.lang.Appendable</div><div class="">resolving [from .class]: java.io.Closeable</div><div class="">resolving [from .class]: java.io.Writer</div><div class="">resolving [from .class]: java.io.InputStream</div><div class="">resolving [from .class]: java.io.ObjectInput</div><div class="">resolving [from .class]: java.io.ObjectStreamConstants</div><div class="">resolving [from .class]: java.lang.Exception</div><div class="">resolving [from .class]: java.lang.ReflectiveOperationException</div><div class="">resolving [from .class]: java.io.OutputStream</div><div class="">resolving [from .class]: java.io.ObjectOutput</div><div class="">resolving [from .class]: java.lang.reflect.GenericDeclaration</div><div class="">resolving [from .class]: java.lang.reflect.Type</div><div class="">resolving [from .class]: java.lang.reflect.AnnotatedElement</div><div class="">resolving [from .class]: java.lang.Iterable</div><div class="">resolving [from .class]: java.lang.AutoCloseable</div><div class="">resolving [from .class]: java.io.Flushable</div><div class="">resolving [from .class]: java.io.DataInput</div><div class="">resolving [from .class]: java.io.DataOutput</div><div class="">resolving [from .class]: java.lang.Void</div><div class="">resolving [from .class]: java.lang.Float</div><div class="">resolving [from .class]: java.lang.Number</div><div class="">resolving [from .class]: java.lang.NumberFormatException</div><div class="">resolving [from .class]: java.lang.IllegalArgumentException</div><div class="">resolving [from .class]: java.lang.RuntimeException</div><div class="">resolving [from .class]: java.lang.Double</div><div class="">resolving [from .class]: java.lang.AssertionError</div><div class="">resolving [from .class]: java.lang.Error</div><div class="">resolving [from .class]: java.lang.Integer</div><div class="">resolving [from .class]: java.lang.Character</div><div class="">resolving [from .class]: java.lang.Long</div><div class="">resolving [from .class]: java.lang.Short</div><div class="">resolving [from .class]: java.lang.StringBuffer</div><div class="">resolving [from .class]: java.lang.AbstractStringBuilder</div><div class="">resolving [from .class]: java.io.ObjectStreamField</div><div class="">resolving [from .class]: java.lang.Boolean</div><div class="">resolving [from .class]: java.lang.reflect.Constructor</div><div class="">resolving [from .class]: java.lang.ClassLoader</div><div class="">resolving [from .class]: java.security.ProtectionDomain</div><div class="">resolving [from .class]: java.lang.Class$SecurityManagerHelper</div><div class="">resolving [from .class]: java.lang.ref.SoftReference</div><div class="">resolving [from .class]: sun.reflect.generics.repository.ClassRepository</div><div class="">resolving [from .class]: sun.reflect.ReflectionFactory</div><div class="">resolving [from .class]: java.util.Map</div><div class="">resolving [from .class]: sun.reflect.annotation.AnnotationType</div><div class="">resolving [from .class]: java.lang.ClassValue$ClassValueMap</div><div class="">resolving [from .class]: java.lang.InstantiationException</div><div class="">resolving [from .class]: java.lang.IllegalAccessException</div><div class="">resolving [from .class]: java.lang.reflect.TypeVariable</div><div class="">resolving [from .class]: java.lang.Package</div><div class="">resolving [from .class]: java.lang.reflect.Method</div><div class="">resolving [from .class]: java.lang.Class$EnclosingMethodInfo</div><div class="">resolving [from .class]: java.lang.reflect.Field</div><div class="">resolving [from .class]: java.lang.SecurityException</div><div class="">resolving [from .class]: java.lang.NoSuchFieldException</div><div class="">resolving [from .class]: java.lang.NoSuchMethodException</div><div class="">resolving [from .class]: java.net.URL</div><div class="">resolving [from .class]: java.lang.SecurityManager</div><div class="">resolving [from .class]: java.lang.NoSuchMethodError</div><div class="">resolving [from .class]: java.lang.Class$ReflectionData</div><div class="">resolving [from .class]: sun.reflect.generics.factory.GenericsFactory</div><div class="">resolving [from .class]: sun.reflect.ConstantPool</div><div class="">resolving [from .class]: java.lang.annotation.Annotation</div><div class="">resolving [from .class]: java.lang.reflect.AccessibleObject</div><div class="">resolving [from .class]: java.lang.reflect.Member</div><div class="">resolving [from .class]: java.lang.ref.Reference</div><div class="">resolving [from .class]: sun.reflect.generics.repository.GenericDeclRepository</div><div class="">resolving [from .class]: java.util.WeakHashMap</div><div class="">resolving [from .class]: java.lang.IncompatibleClassChangeError</div><div class="">resolving [from .class]: sun.reflect.generics.repository.AbstractRepository</div><div class="">resolving [from .class]: java.util.AbstractMap</div><div class="">resolving [from .class]: java.lang.LinkageError</div><div class="">resolving [from .class]: java.lang.Byte</div><div class="">resolving [from .class]: java.lang.NoClassDefFoundError</div><div class="">resolving [from .class]: java.lang.IndexOutOfBoundsException</div><div class="">resolving [from .class]: java.lang.StackOverflowError</div><div class="">resolving [from .class]: java.lang.VirtualMachineError</div><div class="">resolving [from .class]: java.lang.AbstractMethodError</div><div class="">resolving [from .class]: java.lang.ClassCastException</div><div class="">resolving [from .class]: java.lang.Runnable</div><div class="">resolving [from .class]: java.lang.NullPointerException</div><div class="">resolving [from .class]: java.lang.VerifyError</div><div class="">resolving [from .class]: java.lang.NoSuchFieldError</div><div class="">resolving [from .class]: java.lang.IllegalMonitorStateException</div><div class="">resolving [from .class]: java.lang.Thread</div><div class="">resolving [from .class]: java.lang.UnknownError</div><div class="">resolving [from .class]: java.lang.InternalError</div><div class="">resolving [from .class]: java.lang.ArithmeticException</div><div class="">resolving [from .class]: java.lang.NegativeArraySizeException</div><div class="">resolving [from .class]: java.lang.ClassCircularityError</div><div class="">resolving [from .class]: java.lang.Cloneable</div><div class="">resolving [from .class]: java.lang.ref.Finalizer</div><div class="">resolving [from .class]: java.lang.ref.FinalReference</div><div class="">Warning: java.dyn.InvokeDynamic is a phantom class!</div><div class="">resolving [from .class]: java.lang.ArrayIndexOutOfBoundsException</div><div class="">resolving [from .class]: java.lang.ThreadDeath</div><div class="">resolving [from .class]: java.lang.InstantiationError</div><div class="">resolving [from .class]: java.lang.IllegalAccessError</div><div class="">resolving [from .class]: java.lang.ClassFormatError</div><div class="">resolving [from .class]: java.lang.UnsatisfiedLinkError</div><div class="">resolving [from .class]: java.lang.ArrayStoreException</div><div class="">resolving [from .class]: java.lang.ExceptionInInitializerError</div><div class="">resolving [from .class]: java.lang.OutOfMemoryError</div><div class="">Warning: sos.mrtd.PassportFileService is a phantom class!</div><div class="">Warning: sos.mrtd.AAEvent is a phantom class!</div><div class="">Warning: sos.mrtd.BACEvent is a phantom class!</div><div class="">Warning: sos.mrtd.PassportAuthService is a phantom class!</div><div class="">Warning: sos.mrtd.AuthListener is a phantom class!</div><div class="">Warning: sos.mrtd.PassportService is a phantom class!</div><div class="">Warning: sos.mrtd.sample.APDULogPanel is a phantom class!</div><div class="">Warning: sos.mrtd.sample.BACPanel is a phantom class!</div><div class="">Warning: sos.mrtd.sample.CommandAPDUField is a phantom class!</div><div class="">Warning: sos.mrtd.sample.FacePanel is a phantom class!</div><div class="">Warning: sos.mrtd.sample.APDUSenderPanel is a phantom class!</div><div class="">Warning: sos.mrtd.sample.AAPanel is a phantom class!</div><div class="">Warning: sos.mrtd.sample.PassportGUI is a phantom class!</div><div class="">Warning: sos.mrtd.sample.LDSPanel is a phantom class!</div><div class="">Warning: sos.mrtd.sample.InitPassportPanel is a phantom class!</div><div class="">Warning: sos.mrtd.SecureMessagingWrapper is a phantom class!</div><div class="">Warning: sos.mrtd.Util is a phantom class!</div><div class="">Warning: sos.mrtd.PassportApduService is a phantom class!</div><div class="">Warning: sos.util.Hex is a phantom class!</div><div class="">Warning: sos.smartcards.CardService is a phantom class!</div><div class="">Warning: sos.smartcards.JPCSCService is a phantom class!</div><div class="">Warning: sos.smartcards.BERTLVObject is a phantom class!</div><div class="">Warning: sos.smartcards.AbstractCardService is a phantom class!</div><div class="">Warning: sos.smartcards.ISO7816 is a phantom class!</div><div class="">Warning: sos.smartcards.JCOPEmulatorService is a phantom class!</div><div class="">Warning: sos.smartcards.Apdu is a phantom class!</div><div class="">Warning: sos.smartcards.APDUIOService is a phantom class!</div><div class="">Warning: sos.smartcards.APDUListener is a phantom class!</div><div class="">Warning: sos.gui.HexViewPanel is a phantom class!</div><div class="">Warning: sos.gui.HexArrayField is a phantom class!</div><div class="">Warning: sos.gui.HexField is a phantom class!</div><div class="">Warning: sos.gui.ImagePanel is a phantom class!</div><div class="">Transforming sos.mrtd.PassportFileService...</div><div class="">Transforming sos.mrtd.AAEvent...</div><div class="">Transforming sos.mrtd.BACEvent...</div><div class="">Transforming sos.mrtd.PassportAuthService...</div><div class="">Transforming sos.mrtd.AuthListener...</div><div class="">Transforming sos.mrtd.PassportService...</div><div class="">Transforming sos.mrtd.sample.APDULogPanel...</div><div class="">Transforming sos.mrtd.sample.BACPanel...</div><div class="">Transforming sos.mrtd.sample.CommandAPDUField...</div><div class="">Transforming sos.mrtd.sample.FacePanel...</div><div class="">Transforming sos.mrtd.sample.APDUSenderPanel...</div><div class="">Transforming sos.mrtd.sample.AAPanel...</div><div class="">Transforming sos.mrtd.sample.PassportGUI...</div><div class="">Transforming sos.mrtd.sample.LDSPanel...</div><div class="">Transforming sos.mrtd.sample.InitPassportPanel...</div><div class="">Transforming sos.mrtd.SecureMessagingWrapper...</div><div class="">Transforming sos.mrtd.Util...</div><div class="">Transforming sos.mrtd.PassportApduService...</div><div class="">Transforming sos.util.Hex...</div><div class="">Transforming sos.smartcards.CardService...</div><div class="">Transforming sos.smartcards.JPCSCService...</div><div class="">Transforming sos.smartcards.BERTLVObject...</div><div class="">Transforming sos.smartcards.AbstractCardService...</div><div class="">Transforming sos.smartcards.ISO7816...</div><div class="">Transforming sos.smartcards.JCOPEmulatorService...</div><div class="">Transforming sos.smartcards.Apdu...</div><div class="">Transforming sos.smartcards.APDUIOService...</div><div class="">Transforming sos.smartcards.APDUListener...</div><div class="">Transforming sos.gui.HexViewPanel...</div><div class="">Transforming sos.gui.HexArrayField...</div><div class="">Transforming sos.gui.HexField...</div><div class="">Transforming sos.gui.ImagePanel...</div><div class="">Writing to jmrtd/bin/sos/mrtd/PassportFileService.class</div><div class="">[sos.mrtd.PassportFileService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/AAEvent.class</div><div class="">[sos.mrtd.AAEvent] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/BACEvent.class</div><div class="">[sos.mrtd.BACEvent] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/PassportAuthService.class</div><div class="">[sos.mrtd.PassportAuthService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/AuthListener.class</div><div class="">[sos.mrtd.AuthListener] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/PassportService.class</div><div class="">[sos.mrtd.PassportService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/APDULogPanel.class</div><div class="">[sos.mrtd.sample.APDULogPanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/BACPanel.class</div><div class="">[sos.mrtd.sample.BACPanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/CommandAPDUField.class</div><div class="">[sos.mrtd.sample.CommandAPDUField] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/FacePanel.class</div><div class="">[sos.mrtd.sample.FacePanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/APDUSenderPanel.class</div><div class="">[sos.mrtd.sample.APDUSenderPanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/AAPanel.class</div><div class="">[sos.mrtd.sample.AAPanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/PassportGUI.class</div><div class="">[sos.mrtd.sample.PassportGUI] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/LDSPanel.class</div><div class="">[sos.mrtd.sample.LDSPanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/sample/InitPassportPanel.class</div><div class="">[sos.mrtd.sample.InitPassportPanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/SecureMessagingWrapper.class</div><div class="">[sos.mrtd.SecureMessagingWrapper] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/Util.class</div><div class="">[sos.mrtd.Util] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/mrtd/PassportApduService.class</div><div class="">[sos.mrtd.PassportApduService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/util/Hex.class</div><div class="">[sos.util.Hex] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/CardService.class</div><div class="">[sos.smartcards.CardService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/JPCSCService.class</div><div class="">[sos.smartcards.JPCSCService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/BERTLVObject.class</div><div class="">[sos.smartcards.BERTLVObject] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/AbstractCardService.class</div><div class="">[sos.smartcards.AbstractCardService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/ISO7816.class</div><div class="">[sos.smartcards.ISO7816] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/JCOPEmulatorService.class</div><div class="">[sos.smartcards.JCOPEmulatorService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/Apdu.class</div><div class="">[sos.smartcards.Apdu] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/APDUIOService.class</div><div class="">[sos.smartcards.APDUIOService] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/smartcards/APDUListener.class</div><div class="">[sos.smartcards.APDUListener] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/gui/HexViewPanel.class</div><div class="">[sos.gui.HexViewPanel] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/gui/HexArrayField.class</div><div class="">[sos.gui.HexArrayField] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/gui/HexField.class</div><div class="">[sos.gui.HexField] Constructing baf.JasminClass...</div><div class="">Writing to jmrtd/bin/sos/gui/ImagePanel.class</div><div class="">[sos.gui.ImagePanel] Constructing baf.JasminClass...</div><div class="">Soot finished on Thu May 12 18:10:36 CEST 2016</div><div class="">Soot has run for 0 min. 0 sec.</div></div></body></html>