在Frama-c中键入检查

时间:2012-11-13 14:06:52

标签: frama-c

我想知道Frama-C是否实现了与指针相关的某种类型检查。例如,请考虑以下事项:

int x[10];
void * v = x;

//@ assert isOfTypeInt(x, 10)
//@ assert isOfTypeInt(v, 10) 

在精神上有什么类似的东西吗?

查看ACSL手册,有很多方法可以检查内存和指针的使用(其中一部分是在Frama-C Oxygen中实现的)。我没有找到任何一般支持来处理类型信息。我们可以使用frama-c插件吗?

谢谢, 爱德华

1 个答案:

答案 0 :(得分:2)

在ACSL中确实没有这样的东西。事实上,C中的内存位置实际上并没有与它们相关的类型信息:如果我们忽略了潜在的对齐约束,则任何4字节的块都可以用来存储32位整数。

也就是说,Frama-C是一个可扩展的平台,它总是可以编写一个插件来满足特定需求。对于示例中的x等纯变量,可以在AST中相应vtype的{​​{1}}字段中直接访问声明的类型。对于指针,例如varinfo,应该可以利用Value的结果来查看它们可能指向的位置并使用它来获取适当的类型信息(主要问题是决定当Value不精确时应该做什么,以及给出了几个不同类型的潜在位置。