簡體   English   中英

帶有 Eva 插件的 Frama-C - 不支持的 ACSL 結構

[英]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 無法評估此后置條件也不重要。
  • 在您解析的文件列表中包含來自 Frama-C 的libcstring.c :這將提供 Eva 將分析的strcmp的定義。 請注意,由於此定義基本上是您期望的for循環,如果您想要精確的結果,您可能需要調整 Eva 的精度選項。 基本上,為此,只需在命令行上添加$(frama-c -print-share-path)/libc/string.c
  • 提供您自己對 function 的定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM