当我使用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;”应该是高光。 但是,运行结果似乎不正确。
答案 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.c
和result += 100
。