Ucombinator maintained fork. Original from Shuying at https://github.com/shuyingliang/pushdownoo.
The reason didn't move to 2.10:
- StackOverflow error in Scala 2.10
- Code changes such as case class must have parameters
- Scala 2.9.1 works perfectly with Play 2.0.4
Compiled successfully with the following JDKs:
- OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1).
- Oracle JDK 6 and 7. If you're on Mac, use the Oracle JDK. Compiling openJDK on Mac is complicated and prone to failure.
For converting to svg dyck state graph. (It will get choked on large dot files)
Ensure the graphviz is installed at /usr/local/bin/dot
.
cd pdafordalvik
make compile
Still in pdafordalvik
folder:
java -jar artifacts/PushdownOO_Exflow.jar org.ucombinator.dalvik.cfa.cesk.RunAnalysis \
[--k <number>] [--gc] [--lra] [--aco] [--godel] [--dump-graph] \
[--interrupt-after <number-of-states>] \
[--interrupt-after-time <number of minutes>] \
path/to/your/filename.apk
e.g.
java -jar artifacts/PushdownOO_Exflow.jar org.ucombinator.dalvik.cfa.cesk.RunAnalysis \
--k 1 --gc --lra --aco --godel --dump-graph ./test/Bookworm.apk
java -jar artifacts/PushdownOO_Exflow.jar org.ucombinator.dalvik.cfa.cesk.RunAnalysis \
--k 1 --gc --lra --aco --godel --for-intent-fuzzer --intraprocedural \
./test/Twitter_3.7.1.apk
Note: The feature of producing flow-sensitive paths in text report (apposed to in graph before) with intent operations/data involves, is not yet fully tested. At least, the output is produced after the depth first search on the analyzed graphs, which can take a long time!
In case of large apps, please use JVM options (before -jar) to increase run time heap/stack like this (or larger):
-XX:MaxPermSize=512m -Xms512m -Xmx1024M -Xss1024m
- The benchmark apks locates in benchmark-dacapo-apks
- During analysis,
--obranches [number]
for branch optimization to termiate fast safely.