[英]Frama-C with Eva plugin - Unsupported ACSL construct
我目前正在嘗試使用 Frama-C 及其插件Eva評估測試套件。 為此,我使用以下標志運行 Frama-C:
frama-c -eva -cpp-extra-args="-DINCLUDEMAIN -I .../<headerfile folder>" <some c file>.c
Frama-C (24.0) 是通過 Opam 安裝的。 運行 eva 時,一個輸出是:
[eva] using spcification for function strcpy
和
[eva] FRAMAC_SHARE/libc/string.h:373:cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
正如您在此處看到的: Eva states unsupported ACSL construct 。
在查看 string.h ( ~/.opam/default/share/frama-c/libc
) 文件時,我找到了 strcpy function:
/*@
...
@ ensures equal_contents: strcmp(dest,src) == 0;
@ ensures result_ptr: \result == dest;
@*/
extern char *strcpy(char *restrict dest, const char *restrict src);
和 strcmp function:
/*@ requires valid_string_s1: valid_read_string(s1);
`@ requires valid_string_s2: valid_read_string(s2);
@ assigns \result \from indirect:s1[0..], indirect:s2[0..];
@ ensures acsl_c_equiv: \result == strcmp(s1,s2);
@*/
extern int strcmp (const char *s1, const char *s2);
據我了解,Eva 將此文件與 ACSL 合同一起使用,以了解究竟需要檢查什么,並為strcmp
提供了 ACSL 合同。
有人知道為什么會出現此錯誤消息以及如何解決此問題嗎?
非常感謝!
Eva 不支持所有 ACSL 結構。 值得注意的是, strcmp
是由公理定義的(請參閱__fc_string_axiomatics.h
),這對 WP 插件有利,但對 Eva 非常不利。 您可以執行以下操作:
strcmp
的結果不精確這一事實對您的分析並不重要,那么 Eva 無法評估此后置條件也不重要。libc
的string.c
:這將提供 Eva 將分析的strcmp
的定義。 請注意,由於此定義基本上是您期望的for
循環,如果您想要精確的結果,您可能需要調整 Eva 的精度選項。 基本上,為此,只需在命令行上添加$(frama-c -print-share-path)/libc/string.c
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.