[Soot-list] Using Soot to Compile Sourcecode to Bytecode with Phantom Classes

Sven Amann amann at st.informatik.tu-darmstadt.de
Thu May 12 12:17:18 EDT 2016


Hi everyone,

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).

I use the following script to test this:
> JDK=/usr/lib/jvm/java-7-oracle/jre/lib/rt.jar
> 
> rm -rf jmrtd/
> svn checkout http://svn.code.sf.net/p/jmrtd/code/passporthostapi/@51 jmrtd
> INPUT=jmrtd/src/
> OUTPUT=jmrtd/bin/
> 
> 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


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)
I get the same results with both Java 7 and 8.

My questions now are:
1) Is what I’m trying to do possible at all?
2) If so, what am I doing wrong?

Thank you very much!
Best, Sven

[1] https://github.com/stg-tud/MUBench/tree/MSR16 <https://github.com/stg-tud/MUBench/tree/MSR16>

—
Soot output to the above script:

Soot started on Thu May 12 18:10:35 CEST 2016
resolving [from .class]: java.lang.Throwable
resolving [from .class]: java.lang.Object
resolving [from .class]: java.io.Serializable
resolving [from .class]: java.lang.String
resolving [from .class]: java.lang.StackTraceElement
resolving [from .class]: java.util.List
resolving [from .class]: java.io.PrintStream
resolving [from .class]: java.lang.Throwable$PrintStreamOrWriter
resolving [from .class]: java.util.Set
resolving [from .class]: java.io.PrintWriter
resolving [from .class]: java.io.ObjectInputStream
resolving [from .class]: java.io.IOException
resolving [from .class]: java.lang.ClassNotFoundException
resolving [from .class]: java.io.ObjectOutputStream
resolving [from .class]: java.lang.Class
resolving [from .class]: java.lang.CloneNotSupportedException
resolving [from .class]: java.lang.InterruptedException
resolving [from .class]: java.lang.Comparable
resolving [from .class]: java.lang.CharSequence
resolving [from .class]: java.util.Collection
resolving [from .class]: java.io.FilterOutputStream
resolving [from .class]: java.lang.Appendable
resolving [from .class]: java.io.Closeable
resolving [from .class]: java.io.Writer
resolving [from .class]: java.io.InputStream
resolving [from .class]: java.io.ObjectInput
resolving [from .class]: java.io.ObjectStreamConstants
resolving [from .class]: java.lang.Exception
resolving [from .class]: java.lang.ReflectiveOperationException
resolving [from .class]: java.io.OutputStream
resolving [from .class]: java.io.ObjectOutput
resolving [from .class]: java.lang.reflect.GenericDeclaration
resolving [from .class]: java.lang.reflect.Type
resolving [from .class]: java.lang.reflect.AnnotatedElement
resolving [from .class]: java.lang.Iterable
resolving [from .class]: java.lang.AutoCloseable
resolving [from .class]: java.io.Flushable
resolving [from .class]: java.io.DataInput
resolving [from .class]: java.io.DataOutput
resolving [from .class]: java.lang.Void
resolving [from .class]: java.lang.Float
resolving [from .class]: java.lang.Number
resolving [from .class]: java.lang.NumberFormatException
resolving [from .class]: java.lang.IllegalArgumentException
resolving [from .class]: java.lang.RuntimeException
resolving [from .class]: java.lang.Double
resolving [from .class]: java.lang.AssertionError
resolving [from .class]: java.lang.Error
resolving [from .class]: java.lang.Integer
resolving [from .class]: java.lang.Character
resolving [from .class]: java.lang.Long
resolving [from .class]: java.lang.Short
resolving [from .class]: java.lang.StringBuffer
resolving [from .class]: java.lang.AbstractStringBuilder
resolving [from .class]: java.io.ObjectStreamField
resolving [from .class]: java.lang.Boolean
resolving [from .class]: java.lang.reflect.Constructor
resolving [from .class]: java.lang.ClassLoader
resolving [from .class]: java.security.ProtectionDomain
resolving [from .class]: java.lang.Class$SecurityManagerHelper
resolving [from .class]: java.lang.ref.SoftReference
resolving [from .class]: sun.reflect.generics.repository.ClassRepository
resolving [from .class]: sun.reflect.ReflectionFactory
resolving [from .class]: java.util.Map
resolving [from .class]: sun.reflect.annotation.AnnotationType
resolving [from .class]: java.lang.ClassValue$ClassValueMap
resolving [from .class]: java.lang.InstantiationException
resolving [from .class]: java.lang.IllegalAccessException
resolving [from .class]: java.lang.reflect.TypeVariable
resolving [from .class]: java.lang.Package
resolving [from .class]: java.lang.reflect.Method
resolving [from .class]: java.lang.Class$EnclosingMethodInfo
resolving [from .class]: java.lang.reflect.Field
resolving [from .class]: java.lang.SecurityException
resolving [from .class]: java.lang.NoSuchFieldException
resolving [from .class]: java.lang.NoSuchMethodException
resolving [from .class]: java.net.URL
resolving [from .class]: java.lang.SecurityManager
resolving [from .class]: java.lang.NoSuchMethodError
resolving [from .class]: java.lang.Class$ReflectionData
resolving [from .class]: sun.reflect.generics.factory.GenericsFactory
resolving [from .class]: sun.reflect.ConstantPool
resolving [from .class]: java.lang.annotation.Annotation
resolving [from .class]: java.lang.reflect.AccessibleObject
resolving [from .class]: java.lang.reflect.Member
resolving [from .class]: java.lang.ref.Reference
resolving [from .class]: sun.reflect.generics.repository.GenericDeclRepository
resolving [from .class]: java.util.WeakHashMap
resolving [from .class]: java.lang.IncompatibleClassChangeError
resolving [from .class]: sun.reflect.generics.repository.AbstractRepository
resolving [from .class]: java.util.AbstractMap
resolving [from .class]: java.lang.LinkageError
resolving [from .class]: java.lang.Byte
resolving [from .class]: java.lang.NoClassDefFoundError
resolving [from .class]: java.lang.IndexOutOfBoundsException
resolving [from .class]: java.lang.StackOverflowError
resolving [from .class]: java.lang.VirtualMachineError
resolving [from .class]: java.lang.AbstractMethodError
resolving [from .class]: java.lang.ClassCastException
resolving [from .class]: java.lang.Runnable
resolving [from .class]: java.lang.NullPointerException
resolving [from .class]: java.lang.VerifyError
resolving [from .class]: java.lang.NoSuchFieldError
resolving [from .class]: java.lang.IllegalMonitorStateException
resolving [from .class]: java.lang.Thread
resolving [from .class]: java.lang.UnknownError
resolving [from .class]: java.lang.InternalError
resolving [from .class]: java.lang.ArithmeticException
resolving [from .class]: java.lang.NegativeArraySizeException
resolving [from .class]: java.lang.ClassCircularityError
resolving [from .class]: java.lang.Cloneable
resolving [from .class]: java.lang.ref.Finalizer
resolving [from .class]: java.lang.ref.FinalReference
Warning: java.dyn.InvokeDynamic is a phantom class!
resolving [from .class]: java.lang.ArrayIndexOutOfBoundsException
resolving [from .class]: java.lang.ThreadDeath
resolving [from .class]: java.lang.InstantiationError
resolving [from .class]: java.lang.IllegalAccessError
resolving [from .class]: java.lang.ClassFormatError
resolving [from .class]: java.lang.UnsatisfiedLinkError
resolving [from .class]: java.lang.ArrayStoreException
resolving [from .class]: java.lang.ExceptionInInitializerError
resolving [from .class]: java.lang.OutOfMemoryError
Warning: sos.mrtd.PassportFileService is a phantom class!
Warning: sos.mrtd.AAEvent is a phantom class!
Warning: sos.mrtd.BACEvent is a phantom class!
Warning: sos.mrtd.PassportAuthService is a phantom class!
Warning: sos.mrtd.AuthListener is a phantom class!
Warning: sos.mrtd.PassportService is a phantom class!
Warning: sos.mrtd.sample.APDULogPanel is a phantom class!
Warning: sos.mrtd.sample.BACPanel is a phantom class!
Warning: sos.mrtd.sample.CommandAPDUField is a phantom class!
Warning: sos.mrtd.sample.FacePanel is a phantom class!
Warning: sos.mrtd.sample.APDUSenderPanel is a phantom class!
Warning: sos.mrtd.sample.AAPanel is a phantom class!
Warning: sos.mrtd.sample.PassportGUI is a phantom class!
Warning: sos.mrtd.sample.LDSPanel is a phantom class!
Warning: sos.mrtd.sample.InitPassportPanel is a phantom class!
Warning: sos.mrtd.SecureMessagingWrapper is a phantom class!
Warning: sos.mrtd.Util is a phantom class!
Warning: sos.mrtd.PassportApduService is a phantom class!
Warning: sos.util.Hex is a phantom class!
Warning: sos.smartcards.CardService is a phantom class!
Warning: sos.smartcards.JPCSCService is a phantom class!
Warning: sos.smartcards.BERTLVObject is a phantom class!
Warning: sos.smartcards.AbstractCardService is a phantom class!
Warning: sos.smartcards.ISO7816 is a phantom class!
Warning: sos.smartcards.JCOPEmulatorService is a phantom class!
Warning: sos.smartcards.Apdu is a phantom class!
Warning: sos.smartcards.APDUIOService is a phantom class!
Warning: sos.smartcards.APDUListener is a phantom class!
Warning: sos.gui.HexViewPanel is a phantom class!
Warning: sos.gui.HexArrayField is a phantom class!
Warning: sos.gui.HexField is a phantom class!
Warning: sos.gui.ImagePanel is a phantom class!
Transforming sos.mrtd.PassportFileService...
Transforming sos.mrtd.AAEvent...
Transforming sos.mrtd.BACEvent...
Transforming sos.mrtd.PassportAuthService...
Transforming sos.mrtd.AuthListener...
Transforming sos.mrtd.PassportService...
Transforming sos.mrtd.sample.APDULogPanel...
Transforming sos.mrtd.sample.BACPanel...
Transforming sos.mrtd.sample.CommandAPDUField...
Transforming sos.mrtd.sample.FacePanel...
Transforming sos.mrtd.sample.APDUSenderPanel...
Transforming sos.mrtd.sample.AAPanel...
Transforming sos.mrtd.sample.PassportGUI...
Transforming sos.mrtd.sample.LDSPanel...
Transforming sos.mrtd.sample.InitPassportPanel...
Transforming sos.mrtd.SecureMessagingWrapper...
Transforming sos.mrtd.Util...
Transforming sos.mrtd.PassportApduService...
Transforming sos.util.Hex...
Transforming sos.smartcards.CardService...
Transforming sos.smartcards.JPCSCService...
Transforming sos.smartcards.BERTLVObject...
Transforming sos.smartcards.AbstractCardService...
Transforming sos.smartcards.ISO7816...
Transforming sos.smartcards.JCOPEmulatorService...
Transforming sos.smartcards.Apdu...
Transforming sos.smartcards.APDUIOService...
Transforming sos.smartcards.APDUListener...
Transforming sos.gui.HexViewPanel...
Transforming sos.gui.HexArrayField...
Transforming sos.gui.HexField...
Transforming sos.gui.ImagePanel...
Writing to jmrtd/bin/sos/mrtd/PassportFileService.class
[sos.mrtd.PassportFileService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/AAEvent.class
[sos.mrtd.AAEvent] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/BACEvent.class
[sos.mrtd.BACEvent] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/PassportAuthService.class
[sos.mrtd.PassportAuthService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/AuthListener.class
[sos.mrtd.AuthListener] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/PassportService.class
[sos.mrtd.PassportService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/APDULogPanel.class
[sos.mrtd.sample.APDULogPanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/BACPanel.class
[sos.mrtd.sample.BACPanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/CommandAPDUField.class
[sos.mrtd.sample.CommandAPDUField] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/FacePanel.class
[sos.mrtd.sample.FacePanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/APDUSenderPanel.class
[sos.mrtd.sample.APDUSenderPanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/AAPanel.class
[sos.mrtd.sample.AAPanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/PassportGUI.class
[sos.mrtd.sample.PassportGUI] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/LDSPanel.class
[sos.mrtd.sample.LDSPanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/sample/InitPassportPanel.class
[sos.mrtd.sample.InitPassportPanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/SecureMessagingWrapper.class
[sos.mrtd.SecureMessagingWrapper] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/Util.class
[sos.mrtd.Util] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/mrtd/PassportApduService.class
[sos.mrtd.PassportApduService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/util/Hex.class
[sos.util.Hex] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/CardService.class
[sos.smartcards.CardService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/JPCSCService.class
[sos.smartcards.JPCSCService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/BERTLVObject.class
[sos.smartcards.BERTLVObject] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/AbstractCardService.class
[sos.smartcards.AbstractCardService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/ISO7816.class
[sos.smartcards.ISO7816] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/JCOPEmulatorService.class
[sos.smartcards.JCOPEmulatorService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/Apdu.class
[sos.smartcards.Apdu] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/APDUIOService.class
[sos.smartcards.APDUIOService] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/smartcards/APDUListener.class
[sos.smartcards.APDUListener] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/gui/HexViewPanel.class
[sos.gui.HexViewPanel] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/gui/HexArrayField.class
[sos.gui.HexArrayField] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/gui/HexField.class
[sos.gui.HexField] Constructing baf.JasminClass...
Writing to jmrtd/bin/sos/gui/ImagePanel.class
[sos.gui.ImagePanel] Constructing baf.JasminClass...
Soot finished on Thu May 12 18:10:36 CEST 2016
Soot has run for 0 min. 0 sec.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20160512/ac889c77/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
Url : https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20160512/ac889c77/attachment-0001.bin 


More information about the Soot-list mailing list