在程序上使用静态调用图分析会发现什么问题?FxCop使用静态调用图分析,使用此技术会发现哪些问题?
http://msdn.microsoft.com/library/bb429476.aspx
http://en.wikipedia.org/wiki/Callgraph
很抱歉我缺乏知识,我通过谷歌找到了一些信息,但担心这些信息非常不完整。谢谢!
发布于 2011-05-04 19:32:57
这是我发现的:
调用图用于检测与程序执行、违反推荐准则和可能的代码注入攻击有关的问题。
通过创建不同方法之间的调用关系图,可以很容易地看到在调用某些方法的特定时间或如何调用某些方法时可能出现问题的位置。当一个过程/函数可能违反了诸如保持代码模块化之类的指导方针时,很容易看出。很容易看出,由于这些调用关系以及它们的结构,恶意代码可能会在某些点被注入。通过这种方式,调用图为静态分析提供了上下文,从而产生更准确的结果。
由于FxCop使用静态调用图,因此它只能在一定程度上推测上述情况。
发布于 2011-05-04 22:49:43
调用图本身就是这样;没有“错误的”调用图(除非你有一个禁止递归的样式检查)。
真正的问题是,要理解程序中某一点上的代码可能会出现问题,您通常需要了解该代码点处于活动状态时的世界形状(什么数据结构是活动的,它们可能包含什么值,它们可能具有什么关系)。调用图显示了执行如何到达感兴趣的代码点,以及沿该调用图路径的所有代码如何设置代码执行上下文。这使静态分析器能够产生“上下文敏感”分析,从而提供更准确的答案。
这导致了第二个问题:如何获得准确的调用图?如果A直接调用B,很容易写下"A调用B“,并认为这是一个准确的调用图事实。但是如果A通过间接指针进行调用(可以说是虚方法分派吗?)突然之间,A给谁打电话变得不那么明确了;你最终得到了A-可能-call-B1,A-可能-call-B2,……A实际调用哪一个实际上取决于A在其中执行的上下文...哦,你需要调用图来制作调用图。好消息是,您可以从底部构建调用图:“我知道这肯定是真的,所以这肯定是真的”。在分析器找不到的地方,它通常会做出保守的猜测:(“所有这些调用都有可能,我不能排除它们”)。这种保守性是静态分析仪准确性的关键原因之一。
https://stackoverflow.com/questions/5865663
复制相似问题