Dependencies 分析要点-定义

Dependencies 分析要点-定义,dependencies,call-graph,soot,Dependencies,Call Graph,Soot,我希望使用调用图来执行一些依赖性分析,我将使用烟尘框架构建调用图。我在一本指南中读到,使用“指向”分析可以提高调用图的精度。“指向”分析到底是什么?它如何提高调用图的准确性?理解数据流的关键问题是知道每个指针可以引用的日期。如果您对指向某个对象的指针一无所知,并且该对象通过该指针更新(例如,p.=3),则整个系统中的任何对象都可能被修改。如果您知道p引用了一个特定的对象O1,那么您就知道只有O1可以被修改。因此,了解p能指什么,对于理解副作用和副作用的范围是很重要的 现在,假设您有指向函数的指针

我希望使用调用图来执行一些依赖性分析,我将使用烟尘框架构建调用图。我在一本指南中读到,使用“指向”分析可以提高调用图的精度。“指向”分析到底是什么?它如何提高调用图的准确性?

理解数据流的关键问题是知道每个指针可以引用的日期。如果您对指向某个对象的指针一无所知,并且该对象通过该指针更新(例如,p.=3),则整个系统中的任何对象都可能被修改。如果您知道p引用了一个特定的对象O1,那么您就知道只有O1可以被修改。因此,了解p能指什么,对于理解副作用和副作用的范围是很重要的

现在,假设您有指向函数的指针。如果您不知道函数指针p指向什么, 一个函数调用是通过p间接进行的,然后任何函数都可能被调用,副作用可能是任何函数的任何副作用。如果你知道p只能指向foo,那么只有foo可能引起的副作用才会发生

在计算调用图时,一些函数调用显然只到达一个地方。一些函数调用可以到达不同的地方,因为它们实际上是通过指针进行的函数调用;OO语言中的“方法”调用通常是这样的,这样做是为了支持多态性

如果不进行指向分析,就不可能完成指向分析的函数指针。这意味着您构造的调用图表示节点栏可能通过其指针p调用许多可能的函数,这意味着您必须担心许多副作用

精确的分析点导致精确的功能点分析,从而导致精确的副作用分析,从而更好地理解代码的功能。当然,精度是相对的;更难得到“非常精确”的分析点。在极限条件下,不可能得到分析的完美点;你在分析图灵机


您可以在

中看到关于流分析的更多讨论和“更精确”调用图的示例了解数据流的一个关键问题是知道每个指针可以引用的日期。如果您对指向某个对象的指针一无所知,并且该对象通过该指针更新(例如,p.=3),则整个系统中的任何对象都可能被修改。如果您知道p引用了一个特定的对象O1,那么您就知道只有O1可以被修改。因此,了解p能指什么,对于理解副作用和副作用的范围是很重要的

现在,假设您有指向函数的指针。如果您不知道函数指针p指向什么, 一个函数调用是通过p间接进行的,然后任何函数都可能被调用,副作用可能是任何函数的任何副作用。如果你知道p只能指向foo,那么只有foo可能引起的副作用才会发生

在计算调用图时,一些函数调用显然只到达一个地方。一些函数调用可以到达不同的地方,因为它们实际上是通过指针进行的函数调用;OO语言中的“方法”调用通常是这样的,这样做是为了支持多态性

如果不进行指向分析,就不可能完成指向分析的函数指针。这意味着您构造的调用图表示节点栏可能通过其指针p调用许多可能的函数,这意味着您必须担心许多副作用

精确的分析点导致精确的功能点分析,从而导致精确的副作用分析,从而更好地理解代码的功能。当然,精度是相对的;更难得到“非常精确”的分析点。在极限条件下,不可能得到分析的完美点;你在分析图灵机

您可以看到更多关于流分析的讨论和“更精确”调用图的示例