[Soot-list] Incorrect entry in TamiFlex log file

Eric Bodden bodden at st.informatik.tu-darmstadt.de
Tue Apr 5 03:29:16 EDT 2011


Hi Christophe.

Sorry for not getting back to you earlier but I was busy travelling. I
think this has to do with the fact that we filter out some stack
frames internal to classes like Class. It appears that in your case
the filtering is too eager.

I will try to confirm this within the next days and get back to you.
In the meantime, if you could send me a minimal test case (single
.java file) that would be awesome.

Eric

On 2 April 2011 18:37,  <Christophe.Foket at elis.ugent.be> wrote:
> Hello,
>
> I've been trying to use TamiFlex' poa.jar to generate a reflection log
> file for the following application:
>
> A.java:
>
>     public enum A {
>
>         HELLO,
>         GOODBYE
>     }
>
> Main.java:
>
>     import java.util.EnumSet;
>
>     public class Main {
>
>         public static void main(String[] args){
>
>                 System.out.println(EnumSet.noneOf(A.class));
>         }
>     }
>
> I used the following command:
>
> -bash-3.2$ java
> -javaagent:../../../libraries/tamixflex/poa-1.1.1.jar=out/ Main
> []
>
> =============================================
> TamiFlex Play-Out Agent Version 1.1.1
> Found 1 new log entries.
> Log file written to:
> /home/cfoket/private/workspaces/workspace/SootTest/test/enum/src/out/refl.log
>
> The refl.log file then contains a single entry:
>
> Method.invoke;<A: A[]
> values()>;java.lang.System$2.getEnumConstantsShared;1140;
>
> However, closer inspection of the class System$2 reveals that there is
> no Method.invoke instruction at address 1140. In fact, javap tells me
> that getEnumConstantsShared only contains the following code:
>
> public java.lang.Enum[] getEnumConstantsShared(java.lang.Class);
>   Code:
>    0:   aload_1
>    1:   invokevirtual   #53; //Method
> java/lang/Class.getEnumConstantsShared:()[Ljava/lang/Object;
>    4:   checkcast       #25; //class "[Ljava/lang/Enum;"
>    7:   areturn
>
> Following the call to Class.getEnumConstantsShared leads me to the
> Method.invoke, call, which is at address 47
>
> 47:  invokevirtual   #899; //Method
> java/lang/reflect/Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
>
> This means that the entry in the reflection log file should have been
> Method.invoke;<A: A[]
> values()>;java.lang.Class.getEnumConstantsShared;47; instead.
>
> Any ideas on why TamiFlex generates the wrong output?
>
> Kind regards,
>
> Christophe
>
> PS: I'm using java version 1.6.0_24.
>
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>



-- 
Dr. Eric Bodden, http://bodden.de/
Principal Investigator in Secure Services at CASED
Coordinator of the CASED Advisory Board of Study Affairs
PostDoc at Software Technology Group, Technische Universität Darmstadt
Tel: +49 6151 16-5478    Fax: +49 6151 16-5410
Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt


More information about the Soot-list mailing list