[Soot-list] Exception in thread "main" java.lang.ClassCastException: soot.coffi.CONSTANT_InterfaceMethodref_info cannot be cast to soot.coffi.CONSTANT_Methodref_info

Steven Arzt Steven.Arzt at cased.de
Wed Jun 4 01:57:49 EDT 2014


Hi Jason,



Great that it works now. I CC’ed the list so that the others also know that
the problem is solved and we don’t need to look further.



In general, I do not recommend mixing Options.v() and command-line options
passed to the main method. I’d always chose one or the other, but not mix
them.



Best regards,

  Steven



Von: Jason Xie [mailto:472408570 at qq.com]
Gesendet: Dienstag, 3. Juni 2014 17:28
An: Steven Arzt
Betreff: Re:AW: AW: [Soot-list] Exception in thread "main"
java.lang.ClassCastException: soot.coffi.CONSTANT_InterfaceMethodref_info
cannot be cast to soot.coffi.CONSTANT_Methodref_info



Dear Steven:

  The code work.Thanks A lot.I am very appreciated.

Jason



------------------ Original ------------------

From:  "Steven Arzt";<Steven.Arzt at cased.de>;

Date:  Tue, Jun 3, 2014 10:26 PM

To:  "Jason Xie"<472408570 at qq.com>;

Subject:  AW: AW: [Soot-list] Exception in thread "main"
java.lang.ClassCastException: soot.coffi.CONSTANT_InterfaceMethodref_info
cannot be cast to soot.coffi.CONSTANT_Methodref_info



Hi Jason,



Your option list is a bit weird. Please set “-src-prec apk”. The main
activity  thing is commented out, but should not be there anyway.
Furthermore, I would not use the “-pp” option with Android since your Java
classpath contains the JRE JARs and not the ones from Android.



Best regards,

  Steven



Von: Jason Xie [mailto:472408570 at qq.com]
Gesendet: Dienstag, 3. Juni 2014 16:11
An: Steven Arzt
Betreff: Re:AW: [Soot-list] Exception in thread "main"
java.lang.ClassCastException: soot.coffi.CONSTANT_InterfaceMethodref_info
cannot be cast to soot.coffi.CONSTANT_Methodref_info



Dear Steven:

  Thanks for your replay firstly.The following code is my soot
configuration:

   main:

                    G.reset();

                        Options.v().set_src_prec(Options.src_prec_apk);

                        List<String> argsList = new ArrayList<String>();

                        argsList.addAll(Arrays.asList(new String[] { "-w",//

                                               // "MainActivity",//
main-class

                                               // "MainActivity",// argument
classes

                                               "-android-jars",//

                                               AndroidPlatform,//

                                               "-process-dir",//

                                               AkpPath,//

                                               "-pp",//

                                               "-allow-phantom-refs", "-f",
"n",//

                        }));


Scene.v().addBasicClass("java.io.PrintStream",SootClass.SIGNATURES);


Scene.v().addBasicClass("java.lang.System",SootClass.SIGNATURES);

                        String[] soot_args = argsList.toArray(new
String[0]);

                Pack pack1=PackManager.v().getPack("wjtp");

                        pack1.add(new Transform("wjtp.myTrans", new
CompTransfor()));

                        soot.Main.main(soot_args);







The CompTransfor class:

    public class CompTransfor extends soot.SceneTransformer {

      @Override

            protected void internalTransform(String arg0, Map<String,
String> arg1) {

             List<SootClass> applicationClass = new ArrayList<SootClass>();

                        Iterator<SootClass> iterator =
Scene.v().getApplicationClasses().iterator();

                        while (iterator.hasNext()) {

                                   SootClass temp = iterator.next();

                                   String classname = temp.getName();

                                   if
(!classname.startsWith("android")&&!classname.startsWith("java"))

                                               applicationClass.add(temp);

                        }

           for (int i = 0; i < applicationClass.size(); i++) {

                   SootClass sc = applicationClass.get(i);

                    List<SootMethod> methodList = sc.getMethods();

                           for (SootMethod sm : methodList) {

                                   Body body = sm.retrieveActiveBody();

                                   UnitGraph g = new
ExceptionalUnitGraph(body);

                        ..............

                }

         }

    }

The is the kernel part of my code to get the unitGraph of the Apk file. Do
it make a sense?

------------------ Original ------------------

From:  "Steven Arzt";<Steven.Arzt at cased.de>;

Date:  Tue, Jun 3, 2014 09:59 PM

To:  "Jason Xie"<472408570 at qq.com>; "'Soot
list'"<soot-list at sable.mcgill.ca>;

Subject:  AW: [Soot-list] Exception in thread "main"
java.lang.ClassCastException: soot.coffi.CONSTANT_InterfaceMethodref_info
cannot be cast to soot.coffi.CONSTANT_Methodref_info



Hi Jason,



Please send the code with which you use Soot and the options with which you
configure Soot. Since you are analyzing an APK file, Soot should not be
using Coffi at all if I’m not mistaken.



Best regards,

  Steven



Von: soot-list-bounces at CS.McGill.CA [mailto:soot-list-bounces at CS.McGill.CA]
Im Auftrag von Jason Xie
Gesendet: Dienstag, 3. Juni 2014 15:46
An: Steven Arzt; Soot list
Betreff: [Soot-list] Exception in thread "main"
java.lang.ClassCastException: soot.coffi.CONSTANT_InterfaceMethodref_info
cannot be cast to soot.coffi.CONSTANT_Methodref_info



Dear Steven and All:

     when I want to get the CFG of apk, I encounter the the following
Exception:(Do some guys have the same problems?)

    Exception in thread "main" java.lang.ClassCastException:
soot.coffi.CONSTANT_InterfaceMethodref_info cannot be cast to
soot.coffi.CONSTANT_Methodref_info

            at soot.coffi.CFG.jimpleReturnTypeOfMethodRef(CFG.java:2488)

            at soot.coffi.CFG.processFlow(CFG.java:2315)

            at soot.coffi.CFG.jimplify(CFG.java:1119)

            at soot.coffi.CFG.jimplify(CFG.java:925)

            at
soot.coffi.CoffiMethodSource.getBody(CoffiMethodSource.java:100)

            at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:89)

            at soot.SootMethod.retrieveActiveBody(SootMethod.java:322)

            at
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyC
allGraphBuilder.java:526)

            at
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFly
CallGraphBuilder.java:419)

            at
soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:
84)

            at
soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransform
er.java:43)

            at soot.SceneTransformer.transform(SceneTransformer.java:39)

            at soot.Transform.apply(Transform.java:90)

            at soot.RadioScenePack.internalApply(RadioScenePack.java:57)

            at
soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.jav
a:49)

            at soot.Pack.apply(Pack.java:116)

            at soot.PackManager.runWholeProgramPacks(PackManager.java:539)

            at soot.PackManager.runPacksNormally(PackManager.java:443)

            at soot.PackManager.runPacks(PackManager.java:388)

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

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

        Looking forward to your reply.

Thanks&Regards,

Jason

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20140604/95b449ba/attachment-0001.html 


More information about the Soot-list mailing list