2012-09-21 56 views
0

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

+1

你还想知道什么?此外,就像,控制流程如何...? –

+0

是的,只是简单地告诉我,像什么数据或我们可以预测它的程序行为。我们可以通过查看它来了解解释器的行为模式或方式。或者它们之间的区别是什么如果执行的二进制文件是在不同的体系结构中编译的,则执 – archies50

回答

1

有区别在这里提出:

  • 一个控制流图近似到该程序的控制。 A control flow graph可以告诉你,对于程序的任何运行,其中可能是控制流。这是完全可行的,该方案可能永远不会执行该图的某些边缘:

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

,所述else分支将永远不会被执行,然而程序分析工具通常会报告有一个控制分支两侧的流动边缘。这是因为程序分析是近似的。

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

一个跟踪将让你看到,没有程序如何执行单次运行,同时控制流图将允许你说“什么是可能的方式,我的程序可以执行。”

真正的程序很大,因此整个程序的控制流程图将会非常大,但是由于您没有指数分支效应,因此跟踪会相当小。

+0

您的回答很有帮助!谢谢 – archies50

+0

现在可以说...我有不同的体系结构编译的相同程序的二进制文件!通过gettng控制流程图,我可以了解解释器行为或有关程序行为的一些常见信息。也许吧? – archies50

+0

?这取决于,但它主要取决于interpeter,如果它的解释代码,那么你不仅看编写的代码的控制流,但解释器如何执行代码 –

相关问题