Очки к анализу - определение - PullRequest
1 голос
/ 21 июля 2011

Я хочу провести некоторый анализ зависимостей, используя граф вызовов, который я построю с использованием фреймворка Soot.Я прочитал в руководстве, что использование анализа «указывает на» может повысить точность графа вызовов.Что такое анализ «указывает на» и как он может улучшить точность графика вызовов?

1 Ответ

1 голос
/ 21 июля 2011

Ключевая проблема в понимании потока данных - знать, на какую дату может ссылаться каждый указатель. Если вы ничего не знаете о указателе на объект, и этот объект обновляется с помощью указателя (например, p. = 3), то возможно, что любой объект во всей вашей системе может быть изменен. Если вы знаете, что p ссылается на конкретный объект O1, то вы знаете, что только O1 может быть изменен. Поэтому знание того, на что может указывать p, важно для понимания побочных эффектов и масштаба таких эффектов.

Теперь представьте, что у вас есть указатели на функции. Если вы не знаете, на что указывает указатель функции p, и вызов функции выполняется косвенно через p, тогда любая функция может быть вызвана, и побочные эффекты могут быть любым побочным эффектом от любой функции. Если вы знаете, что p может указывать только на foo, то могут возникнуть только те побочные эффекты, которые может вызвать foo.

При вычислении графа вызовов некоторые вызовы функций явно идут только в одно место. Некоторые вызовы функций могут происходить в разных местах, потому что они на самом деле являются вызовами функций через указатели; вызовы «метода» в ОО-языках часто бывают такими, и это делается специально для поддержки полиморфизма.

Если вы не выполняете анализ точек-указателей, вы не можете выполнить анализ точек-указателей функций. Это означает, что ваш построенный граф вызовов говорит, что панель узлов может вызывать много возможных функций через указатель p, что означает, что есть много побочных эффектов, о которых вам нужно беспокоиться.

Точный анализ точек-точек приводит к точным функциям-точкам-анализу, что приводит к точному анализу побочных эффектов, что приводит к лучшему пониманию того, что может делать код. Конечно, точность относительна; и труднее получить «очень точные» точки для анализа. В пределе, невозможно получить идеальные точки для анализа; Вы анализируете машины Тьюринга.

Более подробное обсуждение анализа потока и пример «более точного» графа вызовов можно найти по адресу http://www.semdesigns.com/Products/DMS/FlowAnalysis.html

...