frama-c影响分析无法分析控制依赖性?

时间:2012-11-29 03:13:59

标签: frama-c

当我使用frama-c分析我的c程序时。似乎在frama-c的影响插件中存在一个错误。这是我的计划。

#include<stdio.h>
int global;
int main()
{
    global = 12;
    int result = 0;
    if(global > 1)
    {
         result += 100;
    }
    else
    {
        result += 200;
    }
    return 0;
}

我想找到受变量“global”影响的所有stataments。 显然,声明“结果+ = 100;”在“if condition”的范围内,与变量“global”相关,所以语句“result + = 100;”应该是高光。 但是,运行结果似乎不正确。

1 个答案:

答案 0 :(得分:3)

我假设您没有使用任何特殊选项,并且已经在语句global = 12上启动了Frama-C GUI中的影响分析。如果不是这样,请提供更详细的说明。

在您的程序中,if (global > 1)指令被选中,因为对语句global = 12存在数据依赖性。但是,Impact插件不会选择语句result += 100。这是预期的行为,因为在这种情况下存在 no 控制依赖性。请注意else的{​​{1}}分支已死。因此,if的执行并不真正取决于result += 100的评估,因为条件总是如此。由于控制流始终达到if (global > 1)指令,因此不存在控制依赖性。

如果您想在此示例中展示控件依赖项,最简单的方法是将行result += 100更改为

global = 12

并将文件global = Frama_C_interval(0,100); 添加到命令行。在每种情况下,由于控件依赖性,将选择两个指令$(SHARE)/frama-C/libc/__fc_builtin.cresult += 100