[Soot-list] Problem running the Android Instrumentation example

Arzt, Steven steven.arzt at sit.fraunhofer.de
Thu Mar 30 12:48:43 EDT 2017


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>
Cc: 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>:
>>
>> 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
>> https://mailman.CS.McGill.CA/mailman/listinfo/soot-list
>>

_______________________________________________
Soot-list mailing list
Soot-list at CS.McGill.CA
https://mailman.CS.McGill.CA/mailman/listinfo/soot-list


More information about the Soot-list mailing list