是否可以在 frama-c 中指定缓冲区访问子句?
Is it possible to specify a buffer access clause in 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
的每一行代码附近放置一个断言,但是有更好的方法吗?
为防止无效内存访问,您需要检查此函数是否始终使用 data
指针调用,从中至少可以读取 length
个元素。所以你需要写一个前置条件:
//@ requires \valid_read (data + (0 .. length-1));
void process_data(uint32_t * data, size_t length) {
所以如果你能确保这个属性是有效的,它保证你不会有任何无效的内存访问。
假设我有以下功能:
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
的每一行代码附近放置一个断言,但是有更好的方法吗?
为防止无效内存访问,您需要检查此函数是否始终使用 data
指针调用,从中至少可以读取 length
个元素。所以你需要写一个前置条件:
//@ requires \valid_read (data + (0 .. length-1));
void process_data(uint32_t * data, size_t length) {
所以如果你能确保这个属性是有效的,它保证你不会有任何无效的内存访问。