静态调用图分析破译有哪些问题?

时间:2011-05-03 06:01:57

标签: fxcop call-graph static-code-analysis

希望在程序中使用静态调用图分析找到哪些问题? FxCop使用静态调用图分析,使用这种技术会发现什么问题?

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

对于我缺乏知识的道歉,我通过谷歌找到了一些信息,但担心它非常不完整。谢谢!

2 个答案:

答案 0 :(得分:4)

调用图本身就是这样;没有“错误的”调用图(除非你有一个样式检查禁止递归)。

真正的问题是,为了理解程序中某个代码的代码可能存在问题,您通常需要了解世界的形状(哪些数据结构是实时的,它们可能包含哪些值,它们可能具有哪些关系) )在该代码点处于活动状态的那一刻。调用图显示了执行如何到达感兴趣的代码点,并且该调用图路径中的所有代码都设置了代码执行上下文。这使静态分析仪能够产生“上下文敏感”分析,从而提供更准确的答案。

这导致了第二个问题:如何获得准确的调用图?如果您从A直接调用B,则很容易记下“A调用B”并认为这是一个准确的调用图事实。但是,如果A通过间接指针进行调用(你能说虚拟方法调度吗?)突然间,不清楚究竟是谁调用A;你最终得到了A-might-call-B1,A-might-call-B2,......实际调用的A实际上取决于A执行的上下文... oops,你需要调用图制作调用图。好消息是你从底层建立了调用图:“我知道这肯定是真的,所以必须确实如此”。在分析师无法弄清楚的地方,它通常会做出一个保守的猜测:(“所有这些呼叫都有可能,我不能排除它们”)。保守性是静态分析仪准确性的关键原因之一。

答案 1 :(得分:1)

这是我发现的:

调用图用于检测有关程序执行,违反建议指南和可能的代码注入攻击的问题。

通过创建各种方法之间调用关系的图形,很容易看出在调用某些方法或调用某些方法时某些时候可能出现问题的位置。当程序/功能可能违反诸如维持代码模块化之类的指导时,很容易看出。由于那些调用关系以及它们的结构如何,很容易看出恶意代码可能在某些点被注入的位置。通过这种方式,调用图为静态分析提供了上下文,从而产生更准确的结果。

由于FxCop使用静态调用图,因此只能在一定程度上推测上述内容。