2011-07-20 1 views
1

Je cherche à effectuer une analyse de dépendance en utilisant un graphique d'appel que je vais construire en utilisant le framework Soot. J'ai lu dans un guide que l'utilisation de l'analyse «points-à» peut améliorer la précision d'un graphique d'appel. Qu'est-ce que l'analyse «points à» et comment pourrait-elle améliorer la précision d'un graphique d'appel?Analyse des points-à-une-définition

Répondre

1

Un problème clé dans la compréhension du flux de données est de connaître la date à laquelle chaque pointeur peut se référer. Si vous ne savez rien sur un pointeur vers un objet et que cet objet est mis à jour via le pointeur (par exemple, p. = 3), il est possible que tout objet de votre système entier soit modifié. Si vous savez que p référence un objet spécifique O1, alors vous savez que seul O1 peut être modifié. Donc, la connaissance de ce que p peut pointer vers, est important pour comprendre les effets secondaires et la portée de ces effets.

Maintenant, imaginez que vous avez des pointeurs sur les fonctions. Si vous ne savez pas à quoi pointe un pointeur de fonction p, et qu'un appel de fonction est effectué indirectement via p, alors n'importe quelle fonction peut être appelée, et les effets secondaires peuvent être n'importe quel effet secondaire de n'importe quelle fonction. Si vous savez que p ne peut que pointer vers foo, seuls les effets secondaires que foo peut provoquer peuvent se produire. Lors du calcul d'un graphe d'appel, certains appels de fonction ne vont clairement qu'à un seul emplacement. Certains appels de fonction peuvent aller à une variété d'endroits parce qu'ils sont en fait des appels de fonction via des pointeurs; Les appels "method" dans les langages OO sont souvent comme ceci et ceci est fait exprès pour supporter le polymorphisme.

Si vous ne faites pas d'analyse point-à-point, vous ne pouvez pas avoir effectué de points de pointeur de fonction pour l'analyse. Cela signifie que votre graphe d'appel construit indique qu'une barre de nœuds peut appeler plusieurs fonctions possibles via son pointeur p, ce qui signifie qu'il y a beaucoup d'effets secondaires dont vous devez vous soucier. Une analyse précise des points conduit à des analyses précises des points fonctionnels, ce qui conduit à une analyse précise des effets secondaires, ce qui permet de mieux comprendre ce que le code peut faire. Bien sûr, la précision est relative; et il est plus difficile d'obtenir des points «très précis» pour l'analyse. Dans la limite, il est impossible d'obtenir des points parfaits à l'anlayse; vous analysez des machines de turing.

Vous pouvez voir plus de discussion sur l'analyse des flux et un exemple d'un graphique d'appel "plus précis" au http://www.semdesigns.com/Products/DMS/FlowAnalysis.html