Frama-c - 在 strlen 之前证明“分配”的问题

2024-06-08

我的证明有问题assigns调用其他分配的函数后,直到 strlen。下面是一个简单的示例,调用标准库中的函数。函数合约基本上是来自的副本strcpy要求。

#include <string.h>

/*@ 
    requires valid_string_src: valid_read_string(src);
    requires room_string: \valid(dest+(0..strlen(src)));

    requires separation:
      \separated(dest+(0..strlen(src)), src+(0..strlen(src)));

    assigns dest[0..(strlen(src))];

  */
void mycpy(char *dest, const char *src) {
    strcpy(dest, src);
}

Frama-c未能证明assigns对于 mycpy 即使它匹配assignsstrcpy 的:

Goal Assigns ... (exit):
Let a_0 = « dest@L1 + 0 ».
Let x_0 = L_strlen(µ:Mchar@L1, src@L1).
Let x_1 = 1 + x_0.
Let x_2 = L_strlen(Mchar_0, src@L1).
Assume {
  Have: 0 <= x_2.
  Type: is_sint8_chunk(µ:Mchar@L1).
  (* Heap *)
  Type: (region([email protected] /cdn-cgi/l/email-protection) <= 0) /\ (region([email protected] /cdn-cgi/l/email-protection) <= 0) /\
      linked(µ:Malloc@L1) /\ sconst(µ:Mchar@L1).
  (* Goal *)
  When: !invalid(µ:Malloc@L1, a_0, 1 + x_2).
  Stmt { L1:  }
  (* Pre-condition *)
  Have: P_valid_read_string(µ:Malloc@L1, µ:Mchar@L1, src@L1) /\
      valid_rw(µ:Malloc@L1, a_0, x_1) /\
      separated(a_0, x_1, « src@L1 + 0 », x_1).
}
Prove: x_2 <= x_0.

--------------------------------------------------------------------------------
Prover Alt-Ergo 2.3.3: Timeout (Qed:6ms) (10s) (cached).

该目标的完整背景表明它试图证明:L_strlen(Mchar_0, src@L1) <= L_strlen(µ:Mchar@L1, src@L1)。但目前还没有相关信息Mchar_0.

这是什么µ:Mchar@L1 and Mchar_0?我如何证明这个分配?

Frama-c 版本:22.0(钛)。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Frama-c - 在 strlen 之前证明“分配”的问题 的相关文章

  • 检查非零的惯用方法

    当我想检查一个值是否为0在C中 它是如何惯用的 if num if num 0 虽然这是一个品味问题 但我发现这很大程度上取决于意图 如果该值用作布尔值 没关系 如果值正在计算某些东西 则相等更有意义 if isVisible if isV
  • 如何从node js发送json数据到html页面

    我已经使用 Node js Express 从 facebook 获取了一系列 json 数据 现在我想将数据发送到 html 页面 但我不知道如何发送数据并在 html 中对数据进行编码 如果您在 node js 中使用 Express
  • JQuery - 每个会话运行一次

    我有一个由 计算 按钮触发的功能 我需要此行每个会话仅运行一次 会话可能为 1 天或直到浏览器重新加载 popup with form magnificPopup open 这将打开一个放大的弹出窗口 一旦执行此函数 弹出窗口打开 如果再次
  • 如何使用 Scala 2.11 和 sbt 0.13 运行 Cucumber?

    有人有使用 sbt 0 13 和 Scala 2 11 的 Cucumber 项目的示例吗 我需要两者吗cucumber scala 2 11和sbt cucumber plugin 0 8 0 该插件是最新的吗 插件现在去哪里了 哪里做
  • [NSDictionary getObjects:andKeys:] 的示例

    我找不到该方法的工作示例 NSDictionary getObjects andKeys 唯一的example http www mail archive com cocoa dev lists apple com msg24959 htm
  • 如何让一系列非数据库方法模拟事务。

    我需要执行几个需要 事务性 的方法调用 但我不确定除了 try catch finally 之外如何实现它 背景 应用程序基于控制台 应用程序将有多个线程 查询数据库以获取连接信息 连接到 Web 服务以进行登录 生成会话 ID 并更新数据
  • 带有cli的doctrine2 autloader必须使用AnnotationRegistry

    我必须使用 Doctrine Common Annotations AnnotationRegistry registerFile访问实体文件中的注释注册表 这部分需要使用驱动链并使用 orm schema tool creator 但我无
  • Jquery检查元素是否存在然后将类添加到不同的元素

    我对 jquery 不太了解 所以请忍受我的无知 但我很确定我可以用 jquery 完成这个任务 我需要 jquery 来检查某个元素是否存在 如果存在 则将一个类添加到另一个元素 例如 如果存在 最低价格链接 类 则向 常规价格 添加一个
  • 使用 GStreamer 进行流式传输

    我在 System 1 上有一个高清视频 ed hd avi 希望通过网络进行流式传输并播放 System 2 中的内容 我在 Ubuntu 11 04 上使用 GStreamer 对此进行了很多尝试 各种错误使得该目标难以诊断 将感谢获得
  • ASP.NET web.config:system.web.compilation 中调试属性的默认值是什么?

    如果我不包括debug属性中的compilation像这样的元素
  • 了解 Sun JVM [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从 401 服务器错误获取标头

    我正在编写一个端口扫描器来检测本地网络上运行的 Web 服务 其中一些 Web 服务需要基本身份验证 我不知道这些服务的用户名 密码 我只想列出它们 因此现阶段无法提供凭据 我正在使用代码 var request HttpWebReques

随机推荐