2017-07-06 6 views
0

Pendant un moment, j'ai lutté avec la création d'un graphique de flux de contrôle avec Soot et je me suis un peu perdu dans son tutorials. Plutôt que d'utiliser Soot comme un plugin Eclipse, j'ai essayé d'utiliser Soot comme une bibliothèque ou une API.Comment créer un graphique de flux de contrôle avec Soot?

Ce que je veux faire est, j'ai un tas de projets Java et je veux créer/générer un graphique de flux de contrôle de ces projets. J'ai aussi vu qu'il y a une fonctionnalité dans Soot que je peux générer des graphiques de flux de contrôle au format "DOT", ce qui est tout à fait acceptable pour moi aussi.

Tout guide ou échantillon de code qui montre comment créer/générer un graphique de flux de contrôle avec Soot serait génial!

Répondre

1

Vous pouvez créer un CFG de méthode locale en créant simplement un nouvel objet ExceptionalUnitGraph en lui transmettant le SootBody de la méthode. Le tutoriel de suie dans le wiki vous montre comment faire cela.

Pour obtenir un CFG inter-procédurale, à savoir, un ICFG, vous pouvez utiliser l'extension Suie Heros: https://github.com/Sable/heros/blob/develop/src/heros/InterproceduralCFG.java

+0

merci pour la réponse. Cependant, je me demandais s'il y avait une option pour donner le projet Java comme une entrée et le recevoir la sortie comme CFG. Parce que ce que j'ai vu du Javadoc est que je dois assigner chaque classe comme SootClass et chaque méthode comme SootMethod. Ou peut-être que je suis sur le mauvais chemin? – Ekin

+0

Oui, vous semblez avoir mal compris. Soot convertit automatiquement les classes en SootClasses. S'il vous plaît jeter un oeil sur les tutoriels dans le Wiki sur Github. – Eric

+0

J'ai suivi les tutoriels dans le Wiki sur Github. J'ai d'abord essayé d'exécuter Soot en ligne de commande en suivant les instructions sur https://github.com/Sable/soot/wiki/Introduction:-Soot-as-a-command-line-tool. Il est important de mentionner que je cours de suie sur Win7. Quand je tape la commande donnée 'java -cp soot-2.5.0.jar soot.Main -cp. -process-dir .. \ MyProject' J'obtiens un 'Error loading java.util.regex.Pattern'. Cependant, si je l'utilise avec '-pp', j'obtiens un' Impossible de charger le classfile: java.io.ObjectInputStream' et malheureusement je n'ai pas trouvé de moyen de résoudre les problèmes. – Ekin