4

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

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

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

4

2 回答 2

4

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

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

这导致了第二个问题:如何获得准确的调用图?如果您从 A 直接调用 B,则很容易写下“A 调用 B”并感觉这是一个准确的调用图事实。但是,如果 A 通过间接指针进行调用(你能说虚拟方法调度吗?),那么 A 调用的确切对象就不是那么清楚了;你最终会得到 A-might-call-B1, A-might-call-B2, ... A 实际调用的实际上取决于 A 执行的上下文... 哎呀,您需要调用图来制造调用图。好消息是你从底部构建调用图:“我知道这肯定是真的,所以那肯定是真的”。在分析仪无法弄清楚的地方,它通常会做出保守的猜测:(“所有这些调用都可能是可能的,我可以”

于 2011-05-04T14:49:42.600 回答
1

这是我发现的:

调用图用于检测有关程序执行、违反推荐准则以及可能的代码注入攻击的问题。

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

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

于 2011-05-04T11:32:57.300 回答