是否可以在frama-c中指定缓冲区访问子句?

时间:2016-12-15 19:35:36

标签: c frama-c

假设我有以下功能:

void process_data(uint32_t * data, size_t length) {
    for (size_t i = 0; i < length; i++) {
        foo(data[i]);
    }
}

如何告诉Frama-C“此功能确保对data[i]的每次访问都满足条件i < length”?据我所知,我可以在每行代码data附近放置一个断言,但是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

为防止无效的内存访问,您需要检查是否始终使用data指针调用此函数,从中可以读取至少length个元素。所以你需要写一个先决条件:

//@ requires \valid_read (data + (0 .. length-1));
void process_data(uint32_t * data, size_t length) {

因此,如果您可以确保此属性有效,则可以确保您不会有任何无效的内存访问。