簡體   English   中英

Frama-C:警告:Memory model 假設為 function 'write'; 這是什么意思?

[英]Frama-C: Warning: Memory model hypotheses for function 'write'; What does it mean?

我是frama-c的新手。 我做了一些教程,想構建一個微型的真實世界應用程序。 我沒有走得太遠,因為我遇到了一個困擾我的警告。

這是我要驗證的程序:

#include <unistd.h>

/*@
  assigns __fc_fds[0];
  ensures \result == 0;
*/
int main()
{
  char s[] = "hello\n";
  (void)write(1, (const void*)s, 6);
  return 0;
}

我運行以下命令來驗證它:

frama-c -wp -wp-rte -wp-timeout 1 main.c

然后我收到警告,這對我來說沒有意義。

[kernel] Parsing main2.c (with preprocessing)
[rte:annot] annotating function main
[wp] 6 goals scheduled
[wp] Proved goals:    6 / 6
  Qed:             6  (0.51ms-1ms-2ms)
[wp] FRAMAC_SHARE/libc/unistd.h:1158: Warning:
  Memory model hypotheses for function 'write':
  /*@
     behavior wp_typed:
       requires \separated(buf + (..), (int volatile *)__fc_fds + (..));
     */
  extern ssize_t write(int fd, void const *buf, size_t count);

形式分析工具對它們分析的程序做出假設。 這可能是因為語言,或者因為一些合理的假設可以使驗證變得容易得多。

就WP而言,后者尤為重要,因為它可以將“無法驗證任何事情”的情況轉變為“一切都自動證明”的情況。 特別是,WP 有一個盡力而為的別名分析,允許假設一些 memory 位置被分開以產生有效的公式。 這種分析是樂觀的,因為它試圖將不同指針指向的全局變量和 memory 分開,除非它發現一些可能不是這種情況的線索(例如:全局變量的地址被占用,或者它是與指針的值等進行比較)。 然而,必須意識到這種假設,以驗證它們是否確實成立(或者他們不成立,在這種情況下,應該在規范中添加潛在的別名)。 這些假設目前以“盡力而為”的方式生成,因為列出所有內容絕對不合理,因此它試圖列出“重要”的內容。

例如,在這里,WP 假設指向buf的指針和 Frama-C 使用的數組__fc_fds到 model 文件描述符分隔 memory 個位置。 這在您的 function main調用中是正確的,因為您的緩沖區 ( s ) 確實不是__fc_fds

暫無
暫無

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

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