使用Frama-C和WP-Plugin读取子句

时间:2013-03-10 02:47:54

标签: c static-analysis frama-c

在为字符串长度定义公理时,我需要使用reads子句。

/*@
predicate Length_of_str_is{L}(char *s, integer n) =
 (0 <= n) && \valid(s+(0..n)) && s[n] == 0 &&
 \forall integer i; 0 <= i < n ==> s[i] != 0;

axiomatic LengthAxiomatic{
    logic integer Length{L}(char *s) reads s[..];
    axiom str_length{L}:
    \forall integer n, char *s; Length_of_str_is(s, n) ==> Length(s) == n;
}
@*/

然而,WP中尚未实现任意区域的读取条款,还有其他替代方案吗?

我需要这个公理来证明string.h中的一些函数(例如:strcmp)

1 个答案:

答案 0 :(得分:3)

在Frama-C / Wp的氧气版本下,它是安全的(虽然从ACSL的角度来看不正确) 在这种情况下使用reads *s代替reads s[..]

Frama-C的下一个版本将启用一般读取条款。