我们可以从控制流图中获得哪些信息?

时间:2012-09-21 20:47:33

标签: c control-flow machine-code

我有一个C程序跟踪(在VM中执行)的控制流程图,这是非常复杂的。我想知道如果我有一个程序跟踪的CFG,除了控制依赖项,我可以提取哪些信息!谢谢

1 个答案:

答案 0 :(得分:1)

这里有一个区别:

  • 控制流图是程序控件的近似。对于程序的任何运行,control flow graph可以告诉您可能控制流的位置。程序可能永远不会执行图的某个边缘是完全可行的:

    i := 23;
    x := some_complicated_function_returning_zero();
    if (x < i) {
       print "Hello, world!";
    }  else {
       print "Bad!";
    }
    

在该程序中,else分支将永远不会被执行,但是程序分析工具通常会报告分支的两侧都存在控制流边缘。这是因为程序分析是近似的。

  • 程序的 trace 是程序控制流程图中边缘的遍历。一组好的测试通常会有测试,涵盖许多可能的控制流路径(或者至少是那些可行的,直到控制流程图结构中的不精确),但除此之外,覆盖范围广的测试用例变量之类的值在这些执行路径中的范围。

trace 将让您看到,程序如何为单次运行执行,而控制流图将允许您说“我的程序可以执行的可能方式是什么”。

真正的程序很大,因此整个程序的控制流程图会非常大,但是,跟踪会相当小,因为你没有指数分支效应... < / p>