Какие проблемы решает статический анализ графа вызовов? - PullRequest
4 голосов
/ 03 мая 2011

Какие проблемы можно надеяться найти, используя статический анализ графа вызовов в программе?FxCop использует статический анализ графа вызовов, какие проблемы он обнаруживает, используя эту технику?

http://msdn.microsoft.com/library/bb429476.aspx
http://en.wikipedia.org/wiki/Callgraph

Извиняюсь за недостаток знаний, я нашел некоторую информацию через Google, но боюсь, что это значительно неполным.Спасибо!

Ответы [ 2 ]

4 голосов
/ 04 мая 2011

Сам по себе колл-граф является только этим;нет «неправильных» графов вызовов (если у вас нет проверки стиля, запрещающей рекурсию).

Реальная проблема заключается в том, что для понимания того, как может быть проблематичен код в какой-либо точке программы, вам, как правило, нужно понимать форму мира (какие структуры данных являются живыми, какие значения они могут содержать, какие отношенияони могут иметь) в тот момент, когда эта кодовая точка активна.График вызовов показывает, как выполнение может добраться до интересующей точки кода, и весь код вдоль этого пути графа вызовов устанавливает контекст выполнения кода.Это позволяет статическому анализатору производить «контекстно-зависимый» анализ, который дает гораздо более точные ответы.

Это приводит ко второй проблеме: как получить точный график вызовов?Если у вас есть прямой вызов B от A, легко записать «A вызывает B» и почувствовать, что это точный факт графика вызовов.Но если A делает вызов через косвенный указатель (вы можете сказать, что отправка виртуального метода?) Внезапно, то не совсем ясно, кто именно вызывает A;в итоге вы получите A-might-call-B1, A-might-call-B2, ... То, что фактически вызывает A, фактически зависит от контекста, в котором выполняется A ... ой, вам нужен граф вызовов для производстваграф вызовов.Хорошая новость заключается в том, что вы строите график вызовов снизу вверх: «Я знаю, что это, безусловно, правда, так что это, безусловно, должно быть верно».В местах, где анализатор не может понять это, он обычно делает консервативное предположение: («Все эти вызовы могут быть возможны, я не могу их исключить»).Этот консерватизм является одной из ключевых причин точности вашего статического анализатора.

1 голос
/ 04 мая 2011

Вот что я нашел:

Графики вызовов используются для выявления проблем, связанных с выполнением программы, нарушением рекомендуемых рекомендаций и возможными атаками с внедрением кода.

Создав график отношений вызова между различными методами, легко увидеть, где могут возникнуть проблемы в определенное время при вызове определенных методов или при вызове определенных методов. Легко увидеть, когда процедура / функция нарушает правила, такие как поддержание модульности кода. Легко увидеть, где вредоносный код может быть внедрен в определенные моменты из-за этих вызывающих отношений, и как они структурированы. Таким образом, графы вызовов предоставляют контекст для статического анализа, обеспечивая более точные результаты.

Так как FxCop использует статические графы вызовов, он может лишь в некоторой степени спекулировать на вышесказанном.

...