Какие проблемы расширяют анализ статических вызовов?

StackOverflow https://stackoverflow.com/questions/5865663

Вопрос

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

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

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

Это было полезно?

Решение 2

Это то, что я нашел:

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top