我有一个C程序跟踪(在VM中执行)的控制流程图,这是非常复杂的。我想知道如果我有一个程序跟踪的CFG,除了控制依赖项,我可以提取哪些信息!谢谢
答案 0 :(得分:1)
这里有一个区别:
控制流图是程序控件的近似。对于程序的任何运行,control flow graph可以告诉您可能控制流的位置。程序可能永远不会执行图的某个边缘是完全可行的:
i := 23;
x := some_complicated_function_returning_zero();
if (x < i) {
print "Hello, world!";
} else {
print "Bad!";
}
在该程序中,else
分支将永远不会被执行,但是程序分析工具通常会报告分支的两侧都存在控制流边缘。这是因为程序分析是近似的。
trace 将让您看到,程序如何为单次运行执行,而控制流图将允许您说“我的程序可以执行的可能方式是什么”。
真正的程序很大,因此整个程序的控制流程图会非常大,但是,跟踪会相当小,因为你没有指数分支效应... < / p>