[Soot-list] Problems While Trying to Generate CFG on Windows 7

Ekincan Ufuktepe ekincanufuktepe at gmail.com
Mon Jul 17 04:57:30 EDT 2017


Hi Linghui,

Thanks a lot! It seems that I was able to run it as well. However, I still
got some issues. When I run the given command (without "-pp", otherwise I
get a "java.io.ObjectInputStream" Error), the program runs fine.

--graph=BriefBlockGraph -cp . -process-dir ..\...\myProject

When I run CFGViewer, it gives me the output below.

Soot started on Mon Jul 17 11:46:10 MSK 2017
Soot finished on Mon Jul 17 11:46:10 MSK 2017
Soot has run for 0 min. 0 sec.

But still, somehow I can't get any CFG output. I even tried it with
"--multipages".

I have three thoughts about reasons that might problem. They might be true
or not I am not sure. Maybe it might give you a clue as well.

1) I am not using rt.jar properly. (setting its path correctly?)

2) To generate a CFG, is it necessary to first create a jimple or any other
representation to generate a CFG?

3) I am giving actually an eclipse created Java project directory as an
input, which includes both .java and .class files.

Thanks again for all your help!

Best Regards,

Ekin

2017-07-16 23:25 GMT+03:00 Linghui Luo <linghui.luo at uni-paderborn.de>:

> Hi Ekin,
>
>
>
> Good news! In soot there is a main class called CFGViewer in the package
> soot.tools.
>
> You can use it to generate CFG from specified intermediate representation
> in dot files.
>
> I have tried it and it works.
>
>
>
> To use it in the fastest way, you can download the sources files of soot
> and run soot.tools.CFGViewer.java with specific configurations.
>
> Here are the options you may need.  An example configuration is :
>
> --graph=BriefBlockGraph -cp . -pp -process-dir ..\...\myProject
>
>
>
> CFGViewer options:
>
>       (When specifying the value for an '=' option, you only
>
>        need to type enough characters to specify the choice
>
>        unambiguously, and case is ignored.)
>
>
>
>        --alt-classpath PATH :
>
>                 specifies the classpath from which to load classes
>
>                 that implement graph types whose names begin with 'Alt'.
>
>        --graph={BriefUnitGraph|ExceptionalUnitGraph|CompleteUnitGraph|
> TrapUnitGraph|
>
>                 ClassicCompleteUnitGraph|BriefBlockGraph|
>
>                 ExceptionalBlockGraph|CompleteBlockGraph|
>
>                 ClassicCompleteBlockGraph|ArrayRefBlockGraph|
>
>                 ZonedBlockGraph|AltArrayRefBlockGraph|
>
>                 AltBriefUnitGraph|AltCompleteUnitGraph|
>
>                 AltTrapUnitGraph|AltBriefBlockGraph|
>
>                 AltCompleteBlockGraph|AltZonedBlockGraph} :
>
>                 show the specified type of graph.
>
>                 Defaults to BriefUnitGraph.
>
>        --ir={jimple|baf|grimp|shimple|viaShimpleJimple} :
>
>                 create the CFG from the specified intermediate
>
>                 representation. Defaults to jimple.
>
>
>
> Best regards,
>
> Linghui
>
>
>
> *Von:* Soot-list [mailto:soot-list-bounces at CS.McGill.CA] *Im Auftrag von *Linghui
> Luo
> *Gesendet:* Sonntag, 16. Juli 2017 11:07
> *An:* Ekincan Ufuktepe <ekincanufuktepe at gmail.com>; soot-list at cs.mcgill.ca
>
> *Betreff:* Re: [Soot-list] Problems While Trying to Generate CFG on
> Windows 7
>
>
>
> Hi Ekin,
>
>
>
> If you wanna use the wjap.purity phase, I think you should add:
>
>
>
> -w
>
> –no-bodies-for-excluded
>
> -p wjap.purity on
>
> -p wjap.purity dump-intra:true
>
>
>
> in front of -cp . -pp -process-dir ..\..\
>
>
>
> The option –p is to pack phases, it should followed by the phase and an
> option for it.
>
>
>
> However, I never used this phase. I am not sure if you will get your
> expected CFG.dot. It seems to me that the .dot files generated by
> wjap.purity are annotated analysis.
>
>
>
> Anyone else know that if soot supports outputting a .dot CFG?
>
>
>
> Best regards,
>
> Linghui
>
>
>
>
>
> *Von:* Ekincan Ufuktepe [mailto:ekincanufuktepe at gmail.com
> <ekincanufuktepe at gmail.com>]
> *Gesendet:* Freitag, 14. Juli 2017 23:52
> *An:* Linghui Luo <linghui.luo at uni-paderborn.de>
> *Betreff:* Re: [Soot-list] Problems While Trying to Generate CFG on
> Windows 7
>
>
>
> Hello Linghui,
>
>
>
> Thanks for the quick response and advice!
>
>
>
> It seems that using "-allow-phantom-refs" worked well. What I did is;
>
>
>
> java -cp soot-2.5.0.jar soot.Main -allow-phantom-refs -cp . -process-dir
> ..\..\myJavaProject
>
>
>
> Also, I might have forgotten to mention it, but "myJavaProject" contains
> both source and bytecode. Therefore, it worked anyways.
>
>
>
> So my next step is to generate a CFG. Since that I wanted a CFG output of
> "myJavaProject", having a .DOT output would be nice. On the phase option
> list, it looks like to get a .DOT control-flow graph "wjap.purity" is the
> only option. When I give the following command below, unfortunately I don't
> get any .DOT file. Or maybe I am using the wrong phaseName to generate a
> CFG of "myJavaProject"?
>
>
>
> java -cp soot-2.5.0.jar soot.Main -allow-phantom-refs -cp . -pp
> -process-dir ..\..\myJavaProject -dump-cfg wjap.purity
>
>
>
> Best Regards,
>
>
>
> Ekin
>
>
>
>
>
>
>
>
>
> 2017-07-14 17:24 GMT+03:00 Linghui Luo <linghui.luo at uni-paderborn.de>:
>
> Hi Ekin,
>
>
>
> 1.      Are you sure in your target directory there are .class files
> which contains the java bytecode of your source codes? Since you mentioned
> that you proceed a .java file. Soot processes java byte code and transforms
> it into Jimple.
>
> 2.      I think one reason for this kind of error
>
>  Error: Exception in thread "main" java.lang.RuntimeException: couldn't
> load classfile: java.io.ObjectInputStream
>
> is that this class is seen as a phantom class to soot, since it’s a
> native class of java. Therefore, I will suggest you to add
>
> the option “–allow-phantom-refs”.
>
> 3.      You can use soot as a library by just downloading the nightlybuild
>
> https://soot-build.cs.uni-paderborn.de/nightly/soot/
>
>
>
> Best regards,
>
> Linghui
>
> *Von:* Soot-list [mailto:soot-list-bounces at CS.McGill.CA] *Im Auftrag von *Ekincan
> Ufuktepe
> *Gesendet:* Freitag, 14. Juli 2017 15:09
> *An**:* soot-list at cs.mcgill.ca
> *Betreff:* [Soot-list] Problems While Trying to Generate CFG on Windows 7
>
>
>
> Hi,
>
>
>
> I have been trying to generate a CFG (control-flow graph) by using Soot.
> First I tried to run Soot on command-line and I have been following the
> instruction on the link.
>
>
>
> Here are a couple of trials I have made and the errors I have received.
>
>
>
> 1)
>
> Command: java -cp soot-2.5.0.jar soot.Main -cp . -process-dir
> ..\....\myJavaProject
>
>
>
> Error: Exception in thread "main" java.lang.RuntimeException: couldn't
> find class: xxx.yyy.zzz.MyClass (is your soot-class-path set properly?)
>
>
>
> "xxx.yyy.zzz.MyClass" is one of the package and class information that is
> in "myJavaProject"
>
>
>
> 2)
>
> Command: Command: java -cp soot-2.5.0.jar soot.Main -cp . -pp -process-dir
> ..\....\myJavaProject
>
>
>
> Error: Exception in thread "main" java.lang.RuntimeException: couldn't
> load classfile: java.io.ObjectInputStream
>
>
>
> =============================================
>
>
>
> However, when I try to process a single .java file within the same
> directory with soot-2.5.0.jar I get a different error.
>
>
>
> 3)
>
> Command: java -cp soot-2.5.0.jar soot.Main -cp . MyClass
>
>
>
> Error: Exception in thread "main" java.lang.Error: Error loading
> java.util.regex.Pattern
>
>
>
> So tried to use by giving rt.jar's path.
>
>
>
> 4) Command: java -cp soot-2.5.0.jar soot.Main -cp .
> ..\...\Java\jre1.8.0_111\lib\rt.jar MyClass
>
>
>
> Error: Exception in thread "main" java.lang.RuntimeException: couldn't
> find class: ..\...\Java\jre1.8.0_111\lib\rt.jar (is your soot-class-path
> set properly?)
>
>
>
> Or another option
>
>
>
> 5) Command: java -cp soot-2.5.0.jar soot.Main -cp . -pp MyClass
>
>
>
> Error: Exception in thread "main" java.lang.RuntimeException: couldn't
> load classfile: java.io.ObjectInputStream
>
>
>
> I wanted to generate a CFG by using the "dump-cfg", but it seems that I
> got stuck with the basics. I would really appreciate any with to generate a
> CFG of a Java project.
>
>
>
> Or rather than running Soot on command-line, is it possible to generate a
> CFG by using soot-2.5.0.jar as a library. If yes, could you please show me
> how to do it?
>
>
>
> Thanks in advance.
>
>
>
> Ekin
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20170717/86782584/attachment-0001.html>


More information about the Soot-list mailing list