繁体   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