[Soot-list] Problem running the Android Instrumentation example

Arzt, Steven steven.arzt at sit.fraunhofer.de
Mon Apr 3 02:47:12 EDT 2017


Hi Behnam,

To get an instrumented APK file, you also need the –output-format apk parameter, otherwise Soot will cross-compile your code to Java bytecode.

Concerning the exception: Where did you get the platform JARs from? Do not use the ones in the Sable group on Github. Instead, use the ones provided with the official Android SDK that you can download from Google.

Best regards,
  Steven

From: Behnam [mailto:behnam at eecs.tufts.edu]
Sent: Sunday, April 2, 2017 6:56 PM
To: Arzt, Steven <steven.arzt at sit.fraunhofer.de>; Bernhard Berger <berber at tzi.de>
Cc: soot-list at cs.mcgill.ca
Subject: Re: [Soot-list] Problem running the Android Instrumentation example


Hi Steven,

I ran the command you suggested and it produces a number of class files in sootOutput directory. But not an instrumented app. How can I achieve that?

Also, I thought I needed the AndroidInstument<https://raw.githubusercontent.com/wiki/Sable/soot/code/androidinstr/AndroidInstrument.java_.txt> java file. The moment I add that, I get the same error:
behnam at behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$ /usr/lib/jvm/java-8-oracle/bin/java -jar soot-trunk-nightly.jar AndroidInstrument -cp . -src-prec apk -allow-phantom-refs -android-jars  /home/behnam/tcal/responsiveness/soot/stable/android-platforms -process-dir respdroid.apk
Soot started on Sun Apr 02 12:51:11 EDT 2017
Warning: java.lang.Throwable is a phantom class!
Warning: java.lang.Void is a phantom class!
Warning: java.lang.Float is a phantom class!
Warning: java.lang.Double is a phantom class!
Warning: java.lang.AssertionError is a phantom class!
Warning: java.lang.Integer is a phantom class!
Warning: java.lang.NullPointerException is a phantom class!
Warning: java.lang.Character is a phantom class!
Warning: java.lang.Long is a phantom class!
Warning: java.lang.Short is a phantom class!
Warning: java.lang.StringBuffer is a phantom class!
Warning: java.lang.Boolean is a phantom class!
Warning: java.lang.Class is a phantom class!
Warning: java.lang.Byte is a phantom class!
Warning: java.lang.NoClassDefFoundError is a phantom class!
Warning: java.lang.IndexOutOfBoundsException is a phantom class!
Warning: java.lang.StackOverflowError is a phantom class!
Warning: java.lang.invoke.LambdaMetafactory is a phantom class!
Warning: java.lang.Error is a phantom class!
Warning: java.lang.AbstractMethodError is a phantom class!
Warning: java.lang.ClassCastException is a phantom class!
Warning: java.lang.Runnable is a phantom class!
Warning: java.lang.VerifyError is a phantom class!
Warning: java.lang.NoSuchFieldError is a phantom class!
Warning: java.lang.IllegalMonitorStateException is a phantom class!
Warning: java.lang.Thread is a phantom class!
Warning: java.lang.UnknownError is a phantom class!
Warning: java.lang.InternalError is a phantom class!
Warning: java.lang.ArithmeticException is a phantom class!
Warning: java.lang.String is a phantom class!
Warning: java.lang.NegativeArraySizeException is a phantom class!
Warning: java.lang.ClassCircularityError is a phantom class!
Warning: java.lang.Cloneable is a phantom class!
Warning: java.lang.ref.Finalizer is a phantom class!
Warning: java.lang.LinkageError is a phantom class!
Warning: java.lang.IncompatibleClassChangeError is a phantom class!
Warning: java.lang.NoSuchMethodError is a phantom class!
Warning: java.lang.RuntimeException is a phantom class!
Warning: java.lang.ArrayIndexOutOfBoundsException is a phantom class!
Warning: java.lang.ThreadDeath is a phantom class!
Warning: java.io.Serializable is a phantom class!
Warning: java.lang.InstantiationError is a phantom class!
Warning: java.lang.IllegalAccessError is a phantom class!
Warning: java.lang.Object is a phantom class!
Warning: java.lang.ClassNotFoundException is a phantom class!
Warning: java.lang.ClassFormatError is a phantom class!
Warning: java.lang.UnsatisfiedLinkError is a phantom class!
Warning: java.lang.ArrayStoreException is a phantom class!
Warning: java.lang.ExceptionInInitializerError is a phantom class!
Warning: java.lang.OutOfMemoryError is a phantom class!
Exception in thread "main" java.lang.Error: Error: Failed to load java.util.Map$Entry.
    at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:109)
    at soot.JastAddJ.Program.getCompilationUnit(Program.java:873)
    at soot.JastAddJ.Program.getLibCompilationUnit_compute(Program.java:1517)
    at soot.JastAddJ.Program.getLibCompilationUnit(Program.java:1500)
    at soot.JastAddJ.Program.lookupLibType_compute(Program.java:1465)
    at soot.JastAddJ.Program.lookupLibType(Program.java:1433)
    at soot.JastAddJ.Program.lookupType_compute(Program.java:1412)
    at soot.JastAddJ.Program.lookupType(Program.java:1393)
    at soot.JastAddJ.Program.Define_TypeDecl_lookupType(Program.java:1981)
    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
    at soot.JastAddJ.Expr.lookupType(Expr.java:1186)
    at soot.JastAddJ.TypeAccess.decls_compute(TypeAccess.java:425)
    at soot.JastAddJ.TypeAccess.decls(TypeAccess.java:414)
    at soot.JastAddJ.TypeAccess.refined_TypeScopePropagation_TypeAccess_decl(TypeAccess.java:387)
    at soot.JastAddJ.TypeAccess.decl_compute(TypeAccess.java:460)
    at soot.JastAddJ.TypeAccess.decl(TypeAccess.java:452)
    at soot.JastAddJ.TypeAccess.type_compute(TypeAccess.java:590)
    at soot.JastAddJ.TypeAccess.type(TypeAccess.java:583)
    at soot.JastAddJ.CompilationUnit.refined_NameCheck_CompilationUnit_nameCheck(CompilationUnit.java:200)
    at soot.JastAddJ.CompilationUnit.nameCheck(CompilationUnit.java:611)
    at soot.JastAddJ.ASTNode.collectErrors(ASTNode.java:1283)
    at soot.JastAddJ.CompilationUnit.errorCheck(CompilationUnit.java:178)
    at soot.JastAddInitialResolver.formAst(JastAddInitialResolver.java:58)
    at soot.JavaClassSource.resolve(JavaClassSource.java:54)
    at soot.SootResolver.bringToHierarchy(SootResolver.java:243)
    at soot.SootResolver.bringToSignatures(SootResolver.java:275)
    at soot.SootResolver.processResolveWorklist(SootResolver.java:173)
    at soot.SootResolver.resolveClass(SootResolver.java:134)
    at soot.Scene.loadClass(Scene.java:873)
    at soot.Scene.loadClassAndSupport(Scene.java:858)
    at soot.Scene.loadNecessaryClass(Scene.java:1575)
    at soot.Scene.loadNecessaryClasses(Scene.java:1586)
    at soot.Main.run(Main.java:250)
    at soot.Main.main(Main.java:147)
Caused by: java.lang.RuntimeException: java.lang.ClassCastException: soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to soot.JastAddJ.CONSTANT_Class_Info
    at soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:424)
    at soot.JastAddJ.Attributes$TypeAttributes.processAttribute(Attributes.java:316)
    at soot.JastAddJ.Attributes.attributes(Attributes.java:61)
    at soot.JastAddJ.Attributes$TypeAttributes.<init>(Attributes.java:307)
    at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:337)
    at soot.JastAddJ.BytecodeParser.read(BytecodeParser.java:27)
    at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:87)
    ... 36 more
Caused by: java.lang.ClassCastException: soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to soot.JastAddJ.CONSTANT_Class_Info
    at soot.JastAddJ.BytecodeParser.parseThisClass(BytecodeParser.java:437)
    at soot.JastAddJ.BytecodeParser.parseTypeDecl(BytecodeParser.java:404)
    at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:331)
    at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:301)
    at soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:405)
    ... 42 more

Thanks for the support.



Bests,

Behnam

On 03/30/2017 12:48 PM, Arzt, Steven wrote:

Hi Behnam,



I'm not sure why you prepend the VM's classpath to the Soot classpath and I don't think it's necessary for your scenario. Can you try the following command line:



/usr/lib/jvm/java-8-oracle/bin/java -jar soot-trunk-nightly.jar -cp . -src-prec apk -allow-phantom-refs -android-jars  /home/behnam/tcal/responsiveness/soot/stable/android-platforms

-process-dir respdroid.apk



I hope that does the trick.



Best regards,

  Steven



-----Original Message-----

From: Soot-list [mailto:soot-list-bounces at cs.mcgill.ca] On Behalf Of Behnam

Sent: Thursday, March 30, 2017 3:05 PM

To: Bernhard Berger <berber at tzi.de><mailto:berber at tzi.de>

Cc: soot-list at cs.mcgill.ca<mailto:soot-list at cs.mcgill.ca>

Subject: Re: [Soot-list] Problem running the Android Instrumentation example



Hi Bernhard,



Thank you. I added the -src-prec and this is what I get when I run soot with java-1.7:





behnam at behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$

/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -cp

soot-trunk-nightly.jar soot.Main -cp . -pp  AndroidInstrument -src-prec

apk -android-jars

/home/behnam/tcal/responsiveness/soot/stable/android-platforms

-process-dir respdroid.apk

Soot started on Thu Mar 30 08:55:06 EDT 2017

Using

'/home/behnam/tcal/responsiveness/soot/stable/android-platforms/android-17/android.jar'

as android.jar

Exception in thread "main" java.lang.NoSuchMethodError:

java.util.Map.putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

     at soot.util.StringNumberer.findOrAdd(StringNumberer.java:38)

     at soot.SootMethod.<init>(SootMethod.java:179)

     at soot.asm.SootClassBuilder.visitMethod(SootClassBuilder.java:164)

     at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:911)

     at org.objectweb.asm.ClassReader.accept(ClassReader.java:693)

     at org.objectweb.asm.ClassReader.accept(ClassReader.java:506)

     at soot.asm.AsmClassSource.resolve(AsmClassSource.java:59)

     at soot.SootResolver.bringToHierarchy(SootResolver.java:243)

     at soot.SootResolver.bringToSignatures(SootResolver.java:275)

     at soot.SootResolver.processResolveWorklist(SootResolver.java:173)

     at soot.SootResolver.resolveClass(SootResolver.java:134)

     at soot.Scene.tryLoadClass(Scene.java:842)

     at soot.Scene.loadBasicClasses(Scene.java:1504)

     at soot.Scene.loadNecessaryClasses(Scene.java:1583)

     at soot.Main.run(Main.java:250)

     at soot.Main.main(Main.java:147)





I did some research and noticed that the function Map.putIfAbsent is not

present in Java 7, and was only introduced in Java 8. So I use Java 8 to

execute Soot, and this happens:



behnam at behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$

/usr/lib/jvm/java-8-oracle/bin/java -cp soot-trunk-nightly.jar soot.Main

-cp . -pp  AndroidInstrument -src-prec apk -android-jars

/home/behnam/tcal/responsiveness/soot/stable/android-platforms

-process-dir respdroid.apk

Soot started on Thu Mar 30 08:59:10 EDT 2017

Using

'/home/behnam/tcal/responsiveness/soot/stable/android-platforms/android-17/android.jar'

as android.jar

Exception in thread "main" java.lang.Error: Error: Failed to load

java.util.Map$Entry.

     at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:109)

     at soot.JastAddJ.Program.getCompilationUnit(Program.java:873)

     at

soot.JastAddJ.Program.getLibCompilationUnit_compute(Program.java:1517)

     at soot.JastAddJ.Program.getLibCompilationUnit(Program.java:1500)

     at soot.JastAddJ.Program.lookupLibType_compute(Program.java:1465)

     at soot.JastAddJ.Program.lookupLibType(Program.java:1433)

     at soot.JastAddJ.Program.lookupType_compute(Program.java:1412)

     at soot.JastAddJ.Program.lookupType(Program.java:1393)

     at soot.JastAddJ.Program.Define_TypeDecl_lookupType(Program.java:1981)

     at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

     at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

     at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

     at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

     at soot.JastAddJ.Expr.lookupType(Expr.java:1186)

     at soot.JastAddJ.TypeAccess.decls_compute(TypeAccess.java:425)

     at soot.JastAddJ.TypeAccess.decls(TypeAccess.java:414)

     at

soot.JastAddJ.TypeAccess.refined_TypeScopePropagation_TypeAccess_decl(TypeAccess.java:387)

     at soot.JastAddJ.TypeAccess.decl_compute(TypeAccess.java:460)

     at soot.JastAddJ.TypeAccess.decl(TypeAccess.java:452)

     at soot.JastAddJ.TypeAccess.type_compute(TypeAccess.java:590)

     at soot.JastAddJ.TypeAccess.type(TypeAccess.java:583)

     at

soot.JastAddJ.CompilationUnit.refined_NameCheck_CompilationUnit_nameCheck(CompilationUnit.java:200)

     at soot.JastAddJ.CompilationUnit.nameCheck(CompilationUnit.java:611)

     at soot.JastAddJ.ASTNode.collectErrors(ASTNode.java:1283)

     at soot.JastAddJ.CompilationUnit.errorCheck(CompilationUnit.java:178)

     at soot.JastAddInitialResolver.formAst(JastAddInitialResolver.java:58)

     at soot.JavaClassSource.resolve(JavaClassSource.java:54)

     at soot.SootResolver.bringToHierarchy(SootResolver.java:243)

     at soot.SootResolver.bringToSignatures(SootResolver.java:275)

     at soot.SootResolver.processResolveWorklist(SootResolver.java:173)

     at soot.SootResolver.resolveClass(SootResolver.java:134)

     at soot.Scene.loadClass(Scene.java:873)

     at soot.Scene.loadClassAndSupport(Scene.java:858)

     at soot.Scene.loadNecessaryClass(Scene.java:1575)

     at soot.Scene.loadNecessaryClasses(Scene.java:1586)

     at soot.Main.run(Main.java:250)

     at soot.Main.main(Main.java:147)

Caused by: java.lang.RuntimeException: java.lang.ClassCastException:

soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to

soot.JastAddJ.CONSTANT_Class_Info

     at

soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:424)

     at

soot.JastAddJ.Attributes$TypeAttributes.processAttribute(Attributes.java:316)

     at soot.JastAddJ.Attributes.attributes(Attributes.java:61)

     at soot.JastAddJ.Attributes$TypeAttributes.<init>(Attributes.java:307)

     at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:337)

     at soot.JastAddJ.BytecodeParser.read(BytecodeParser.java:27)

     at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:87)

     ... 36 more

Caused by: java.lang.ClassCastException:

soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to

soot.JastAddJ.CONSTANT_Class_Info

     at soot.JastAddJ.BytecodeParser.parseThisClass(BytecodeParser.java:437)

     at soot.JastAddJ.BytecodeParser.parseTypeDecl(BytecodeParser.java:404)

     at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:331)

     at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:301)

     at

soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:405)

     ... 42 more



Now I am not sure if I should use Java 8 or 7. And searching online, I

did not find any solutions to either.



Thank you for helping me.





Bests,



Behnam





On 03/30/2017 02:07 AM, Bernhard Berger wrote:

Hi Behnam,



I’m not quite sure if this may help but I’ve two pointers for you: First of all, you forgot to use the -src-prec option. The log says: "APK file on process dir, but chosen src-prec does not support loading APKs“. Secondly, it looks like Soot is using the Java frontend (it’s parsing the Java files) which fails to load the java.util.Map$Entry. Try using the -src-prec apk option. I hope this will fix your problem.



Regards, Bernhard



Am 29.03.2017 um 23:09 schrieb Behnam <behnam at eecs.tufts.edu><mailto:behnam at eecs.tufts.edu>:



Hi all,



I'm still stuck here. Any help is so much appreciated.



Bests,



-Behnam





On 03/16/2017 03:52 AM, Behnam wrote:

Hi All,



I am trying to run the example AndroidInstrument driver on a very simple app, and after hours of work, this is where I am stuck.



behnam at behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$ /usr/lib/jvm/java-8-oracle/bin/java -cp soot-trunk-nightly.jar soot.Main -cp . -pp  AndroidInstrument -android-jars /home/behnam/tcal/responsiveness/soot/stable/android-platforms -process-dir respdroid.apk







Soot started on Thu Mar 16 03:40:27 EDT 2017

APK file on process dir, but chosen src-prec does not support loading APKs

Exception in thread "main" java.lang.Error: Error: Failed to load java.util.Map$Entry.

    at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:109)

    at soot.JastAddJ.Program.getCompilationUnit(Program.java:844)

    at soot.JastAddJ.Program.getLibCompilationUnit_compute(Program.java:1517)

    at soot.JastAddJ.Program.getLibCompilationUnit(Program.java:1500)

    at soot.JastAddJ.Program.lookupLibType_compute(Program.java:1465)

    at soot.JastAddJ.Program.lookupLibType(Program.java:1433)

    at soot.JastAddJ.Program.lookupType_compute(Program.java:1412)

    at soot.JastAddJ.Program.lookupType(Program.java:1393)

    at soot.JastAddJ.Program.Define_TypeDecl_lookupType(Program.java:1981)

    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

    at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)

    at soot.JastAddJ.Expr.lookupType(Expr.java:1186)

    at soot.JastAddJ.TypeAccess.decls_compute(TypeAccess.java:425)

    at soot.JastAddJ.TypeAccess.decls(TypeAccess.java:414)

    at soot.JastAddJ.TypeAccess.refined_TypeScopePropagation_TypeAccess_decl(TypeAccess.java:387)

    at soot.JastAddJ.TypeAccess.decl_compute(TypeAccess.java:460)

    at soot.JastAddJ.TypeAccess.decl(TypeAccess.java:452)

    at soot.JastAddJ.TypeAccess.type_compute(TypeAccess.java:590)

    at soot.JastAddJ.TypeAccess.type(TypeAccess.java:583)

    at soot.JastAddJ.CompilationUnit.refined_NameCheck_CompilationUnit_nameCheck(CompilationUnit.java:200)

    at soot.JastAddJ.CompilationUnit.nameCheck(CompilationUnit.java:611)

    at soot.JastAddJ.ASTNode.collectErrors(ASTNode.java:1283)

    at soot.JastAddJ.CompilationUnit.errorCheck(CompilationUnit.java:178)

    at soot.JastAddInitialResolver.formAst(JastAddInitialResolver.java:58)

    at soot.JavaClassSource.resolve(JavaClassSource.java:54)

    at soot.SootResolver.bringToHierarchy(SootResolver.java:243)

    at soot.SootResolver.bringToSignatures(SootResolver.java:275)

    at soot.SootResolver.processResolveWorklist(SootResolver.java:173)

    at soot.SootResolver.resolveClass(SootResolver.java:134)

    at soot.Scene.loadClass(Scene.java:873)

    at soot.Scene.loadClassAndSupport(Scene.java:858)

    at soot.Scene.loadNecessaryClass(Scene.java:1575)

    at soot.Scene.loadNecessaryClasses(Scene.java:1586)

    at soot.Main.run(Main.java:250)

    at soot.Main.main(Main.java:147)

Caused by: java.lang.RuntimeException: java.lang.ClassCastException: soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to soot.JastAddJ.CONSTANT_Class_Info

    at soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:424)

    at soot.JastAddJ.Attributes$TypeAttributes.processAttribute(Attributes.java:316)

    at soot.JastAddJ.Attributes.attributes(Attributes.java:61)

    at soot.JastAddJ.Attributes$TypeAttributes.<init>(Attributes.java:307)

    at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:337)

    at soot.JastAddJ.BytecodeParser.read(BytecodeParser.java:27)

    at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:87)

    ... 36 more

Caused by: java.lang.ClassCastException: soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to soot.JastAddJ.CONSTANT_Class_Info

    at soot.JastAddJ.BytecodeParser.parseThisClass(BytecodeParser.java:437)

    at soot.JastAddJ.BytecodeParser.parseTypeDecl(BytecodeParser.java:404)

    at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:331)

    at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:301)

    at soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:405)

    ... 42 more





Note 1: the app's target api was 17.

Note 2: I used the default JDK for Android Studio, which is 1.8.

Note 3: AndroidInstrument is the same exact example file from Soot Android Instrumentation tutorial.



I would highly appreciate any help.



-Behnam



_______________________________________________

Soot-list mailing list

Soot-list at CS.McGill.CA<mailto:Soot-list at CS.McGill.CA>

https://mailman.CS.McGill.CA/mailman/listinfo/soot-list





_______________________________________________

Soot-list mailing list

Soot-list at CS.McGill.CA<mailto:Soot-list at CS.McGill.CA>

https://mailman.CS.McGill.CA/mailman/listinfo/soot-list

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20170403/1d88f10a/attachment-0001.html>


More information about the Soot-list mailing list