自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

翻译 Introduction to C program proof with Frama-C and its WP plugin(十四)——最小契约和引导断言与触发引理

摘要 本文节选自《Introduction to C program proof with Frama-C and its WP plugin》第7.1-7.2节,重点探讨了程序验证的两种方法论:最小契约法和引导断言技术。 7.1节提出通过最小契约验证程序无运行时错误(如整数溢出、无效内存访问),以较低成本提升安全性。以绝对值函数和数组搜索函数为例,说明如何通过前置条件、循环不变式等简化规范,并分析了该方法的优势(隔离验证、逐步完善)与局限性(复杂场景仍需完整功能验证)。 7.2节介绍"auto-

2025-10-10 01:31:24 43

翻译 Introduction to C program proof with Frama-C and its WP plugin(十三)——幽灵代码

本文介绍了ACSL规范语言中的幽灵代码技术,重点阐述了其语法规则和使用限制。幽灵代码通过ghost关键字在注释中嵌入C代码,可以声明变量、定义函数和标签,但不能修改程序控制流或普通变量。Frama-C会严格验证幽灵代码的有效性,确保其不会改变程序的可观察行为。文章通过具体示例展示了幽灵代码的语法形式,并详细说明了Frama-C对幽灵代码的三大验证规则:保持控制流不变性、隔离幽灵内存以及禁止修改普通内存。这些限制保证了幽灵代码仅作为验证辅助工具,不会影响程序的实际执行逻辑。

2025-10-07 15:34:45 42

翻译 Introduction to C program proof with Frama-C and its WP plugin(十二)——逻辑定义与公理定义

本文介绍了ACSL中的三个关键概念:归纳定义、公理定义和幽灵代码。归纳定义通过递归方式定义性质,如偶数的定义;公理定义允许引入假设,但需注意避免不一致性;幽灵代码用于显式建模隐式状态,但可能改变验证程序的行为。通过示例代码展示了如何定义和使用这些概念,并指出在使用时需谨慎以避免证明错误。文章强调在构建归纳定义时需确保良基性,并提供检测不一致性的方法。

2025-10-06 17:13:38 64

翻译 Introduction to C program proof with Frama-C and its WP plugin(十一)——逻辑函数和引理

逻辑函数可以递归地定义,但由于验证器需要执行求值或通过归纳“推理”(这两项任务它们的效率不高),没有更多帮助的情况下,我们很快会受到限制。原因在于,在这种情况下,Z3所采用的启发式方法认为,在函数评估上花费稍多一点时间是值得的。编写一个递归逻辑函数,返回前N个整数的总和,并为C函数编写规范,说明它计算的值与逻辑函数提供的值相同。操作后,数组的第一个值为输入值,并且数组中的每个值都对应于其前一个值加一的结果(使用之前定义的逻辑函数)。请注意,在规范中,计算是使用数学整数进行的。确实,尽管我们的逻辑函数为。

2025-06-12 01:37:49 114

翻译 Introduction to C program proof with Frama-C and its WP plugin(十)——谓词

但我们已有足够的细节来确保,即使我们无法证明我们总是得到正确的结果(例如“如果我压入v,栈顶返回v”的行为),我们仍能保证不会产生运行时错误(如果为栈提供正确的谓词,并证明我们的函数实现确保不会发生运行时错误)。此外,它还允许我们将规范进行分解(例如定义什么是有效数组),这带来了两个令人愉悦的结果:我们的规范更加易读且易于理解,并且我们可以重用现有的证明来简化新程序的证明过程。在这些有用的类型中,有一些专门用于数字,允许我们表达属性或函数,而无需考虑由于C语言基本类型在内存中表示的大小所带来的约束。

2025-06-12 00:51:04 105

翻译 Introduction to C program proof with Frama-C and its WP plugin(九)——函数调用和递归函数

本文介绍了函数调用在Frama-C形式化验证中的处理方法,重点阐述了最弱前置条件(WP)演算的应用。通过函数inc和swap的案例分析,展示了如何通过契约验证函数调用的正确性,包括前置条件的替换和后置条件的逻辑蕴含关系。文章还指出当前WP工具对递归函数终止性验证的局限性,强调需要结合decreases子句补充证明。最后指出模块化验证的核心在于:通过函数契约组合局部证明,实现整体程序的正确性验证(当前工具对递归支持仍不完善)。

2025-06-11 00:47:47 83

翻译 Introduction to C program proof with Frama-C and its WP plugin(八)——循环结构案例

本文介绍了使用Frama-C和WP插件验证C程序循环结构的实例,重点分析了数组操作中的循环不变式。通过搜索、重置和查找替换三个典型函数,展示了如何用ACSL规范描述数组行为,特别是使用\valid_read、\forall和\exists等逻辑谓词来约束数组范围。文章详细解析了循环不变式的构建方法,包括处理已访问元素状态、使用\at函数追踪变量旧值,以及通过assigns子句声明修改范围。这些示例演示了如何通过形式化方法确保循环正确性,为程序验证提供了实用范式。

2025-06-10 01:33:15 57

翻译 Introduction to C program proof with Frama-C and its WP plugin(七)——循环结构

摘要: 本文探讨了循环在程序验证中的复杂性,重点介绍了循环不变式和变式的概念及其在演绎验证中的应用。循环需要特殊处理,因为无法预知其迭代次数。通过引入循环不变式(每次迭代前后必须保持的性质)和循环变式(严格递减的表达式,用于证明终止性),可以验证循环的正确性。文章以示例代码展示了如何在ACSL中指定循环不变式和变式,并利用Frama-C的WP插件生成验证条件。同时指出,部分正确性仅保证终止时的后置条件,而完全正确性还需证明循环终止,后者依赖于循环变式的严格递减性质。

2025-06-09 13:17:14 90

翻译 Introduction to C program proof with Frama-C and its WP plugin(六)——Hoare的基本概念

本文介绍了基于Frama-C和WP插件进基本概念,重点分析了语句组合、条件规则和恒常性规则。通过Hoare逻辑和最强后置条件演算,系统能自动验证程序正确性而无需手动插入中间断言。文章详细说明了复合语句的链式验证方法、条件分支的验证原理,以及如何通过强化后置条件或弱化前置条件来简化证明过程。最后通过具体代码示例展示了变量独立性分析在验证中的应用,并指出恒常性规则本质上是后继规则的特例。这些技术为自动化程序验证提供了理论基础和实用方法。行C程序验证的

2025-06-08 23:02:00 122

翻译 Introduction to C program proof with Frama-C and its WP plugin(五)——Hoare的推理规则与内容

本文节选自《使用Frama-C及其WP插件进行C程序验证入门》第4章,主要介绍基本指令与控制结构的验证方法。文章首先提出可通过推理规则、最弱前置条件和示例三种方式分析C语言结构,随后详细讲解了Hoare三元组和Dijkstra最弱前置条件演算的理论基础。通过绝对值函数等具体案例,展示了如何将程序逻辑转化为形式化验证条件,特别是如何处理指针别名等复杂情况。文章强调随着结构复杂度的增加,验证过程将更依赖工具支持,为后续循环等复杂结构的验证奠定理论基础。

2025-06-04 00:53:52 73

翻译 Introduction to C program proof with Frama-C and its WP plugin(四)——行为与模块化

本文摘要介绍了使用Frama-C及其WP插件进行C程序验证的方法,重点讨论了函数契约中的"行为"(Behaviors)概念。通过绝对值函数(abs)的示例,阐述了如何使用behavior关键字定义不同输入条件下的函数行为,包括assumes子句描述输入假设、ensures子句指定后置条件。文章还讲解了行为的完备性(complete behaviors)和互斥性(disjoint behaviors)验证,并提供了多个练习案例,包括距离计算、条件重置、月份天数等函数的契约重写。最后介绍了W

2025-05-29 12:15:49 87

翻译 Introduction to C program proof with Frama-C and its WP plugin(三)——基本规范和指针

摘要: 本文探讨了如何通过Frama-C的WP插件为C程序函数制定精确的规范,重点分析了函数契约的编写与验证。以最大值函数max为例,指出初始规范过于宽松可能导致错误实现被接受,需通过细化后置条件确保结果的正确性。同时强调了前置条件一致性的重要性,并通过指针示例(如swap函数)说明需使用\valid确保内存安全,以及\old和\at逻辑函数追踪程序状态变化。最后指出,规范需严谨以避免潜在的不一致性和运行时错误。

2025-05-20 23:56:15 162

翻译 Introduction to C program proof with Frama-C and its WP plugin(二)——前置和后置条件

摘要: 本文介绍了使用Frama-C及其WP插件为C程序函数编写契约的方法。函数契约通过前置条件(输入要求)和后置条件(输出保证)定义,使用ACSL语言在注释中表达。后置条件通过ensures子句指定,支持逻辑连接符(如==>和<==>)和属性命名。以绝对值函数abs为例,演示了如何验证代码是否符合规范,并通过Frama-C的图形界面检查证明状态。此外,还讨论了运行时错误(RTE)检测的配置方法,以及验证失败时(如整数溢出)的分析流程。文中强调,规范的明确性对程序正确性证明至关重要,并提供

2025-05-19 14:27:19 137

翻译 Introduction to C program proof with Frama-C and its WP plugin(一)——简要介绍

摘要: C语言因其高效性和跨平台能力被广泛应用于关键系统,但其复杂性易导致编程错误。传统测试方法难以覆盖所有场景,程序证明通过数学验证确保程序在任何输入下都符合规范。本教程介绍使用Frama-C及其WP插件进行C程序证明,强调静态分析相比动态测试的优势,即通过Hoare逻辑和最弱前置条件演算确保程序安全性。形式化方法能排除语言规范和实现错误,但需结合规范验证以完全消除缺陷。工具通过抽象模型具体化程序行为,为开发无漏洞软件提供可能。

2025-05-19 00:30:25 139

原创 Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure

【代码】Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure。

2023-11-08 16:21:28 515

原创 dronekit-sitl+MAVproxy+MissionPlanner进行无人机仿真

以下教程为通过dronekit-sitl、MAVproxy和MissionPlanner进行无人机仿真。

2023-05-31 21:59:13 2875 7

原创 openEuler22.03安装zabbix4.0

教程为openEuler22.03安装zabbix4.0,主要原因是openEuler官方和zabbix官方提供的提供的软件源中没有相关软件,因此需要使用zabbix源码进行编译,并且安装过程中会出现一些异常情况,建议先看过整个安装流程再进行

2022-10-22 16:59:01 2002

原创 cloud-init离线安装编程环境

本博客主要介绍通过cloud-init工具实现在Ubuntu16.04操作系统和KVM虚拟化技术下实现创建虚拟机同时离线安装编程环境

2022-04-18 08:58:35 1720

原创 cloud-init中NoCloud配置

本文章主要记录cloud-init工具中NoCloud数据源的使用方法,可以搭配KVM镜像制作系列文章,为用户定制操作系统。文章目录NoCloud使用方法1. 安装并初始化文件2. 修改cloud-init配置文件3. 编写用户数据4. 制作配置镜像5. 挂载镜像6. 重启虚拟机参考链接NoCloud数据源NoCloud允许用户在不运行网络服务的情况下向虚拟机实例提供用户数据user-data和元数据meta-data:可以通过vfat或者iso9660文件系统上的文件为虚拟机的引导提供数据,文

2022-01-18 22:06:20 3250

原创 KVM下Ubuntu18.04打开设置注销问题

在KVM中创建Ubuntu18.04,打开系统设置,发现直接注销(不是锁屏,因为所有程序都退出)

2022-01-18 14:59:19 2021

原创 KVM虚拟机配置静态IP(四):Centos7

该系列文章为制作KVM虚拟机镜像的同时配置静态IP,为用户直接提供好固定IP,无需手动配置

2022-01-07 10:18:01 4439

原创 KVM虚拟机配置静态IP(三):Centos6

该系列文章为制作KVM虚拟机镜像的同时配置静态IP,为用户直接提供好固定IP,无需手动配置

2022-01-07 09:54:28 1177

原创 KVM虚拟机配置静态IP(二):Ubuntu18.04

该系列文章为制作KVM虚拟机镜像的同时配置静态IP,为用户直接提供好固定IP,无需手动配置

2022-01-06 22:04:18 1060

原创 KVM虚拟机配置静态IP(一):Ubuntu16.04

该系列文章为制作KVM虚拟机镜像的同时配置静态IP,为用户直接提供好固定IP,无需手动配置

2022-01-06 21:00:52 3932

原创 容器技术对比(Docker/LXC/LXD/Multipass)

Docker、LXC、LXD、Multipass四项容器化技术对比

2021-11-23 09:29:38 9533

原创 KVM安装Windows11系列(一)

本教程系列为KVM安装Windows11,会分成两部分,第一部分会跳过Windows11的硬件要求TPM和安全启动,第二部分会安装TPM模拟器进行模拟。

2021-11-20 19:10:09 14175

原创 ubuntu16.04搭建containerd

本博客具体介绍在ubuntu16.04下安装containerd的过程,有关ctr的命令都要有root权限才能运行搭建过程下载containerd安装包解压containerd安装包到根目录下启动containerd并设置开机自启创建默认配置文件查看版本拉取镜像运行容器下载containerd安装包wget https://github.com/containerd/containerd/releases/download/v1.5.7/cri-containerd-cni-1.5.7-linux-a

2021-10-18 20:57:40 666

原创 银河麒麟下libguestfs-tools中virt工具无法使用情况

银河麒麟下libguestfs-tools中virt工具无法使用情况问题描述:在银河麒麟高级服务器版本V10下安装libguestfs-tools工具包后,使用virt-xx等一系列命令都会出现以下错误:libguestfs: build appliancelibguestfs: error: cannot find any suitable libguestfs supermin, fixed or old-style appliance on LIBGUESTFS_PATH (search pa

2021-09-24 13:01:32 2140 1

原创 ubuntu16.04搭建spice-html5用于配合KVM

ubuntu16.04搭建spice-html5用于配合KVM

2021-07-01 09:51:46 1738

原创 Ubuntu16.04搭建gitea1.14.1

以下教程为在Ubuntu16.04上搭建gitea1.14.1,同时附上官方教程链接文章目录1. 数据库准备1.1 登录数据库1.2 创建gitea用户1.3 创建gitea数据库1.4 给gitea用户赋予数据库的权限1.5 测试数据库连接2. 安装gitea2.1 下载gitea二进制文件2.2 服务器配置2.2.1 检查是否安装git2.2.2 添加git用户2.2.3 创建所需的目录2.2.4 将gitea二进制文件复制到指定路径3. 运行gitea3.1 创建gitea.service文件3.2

2021-04-17 16:05:00 876

原创 Ubuntu16.04安装zabbix4.0

以下教程为Ubuntu16.04安装zabbix4.0,需提前自己安装好Mysql数据库。其中第1~7点为主节点安装配置Zabbix-server、Zabbix-agent、Web前端,第8点不用进行;第8点为从节点安装配置Zabbix-agent用于被主节点进行监控,不用进行前7点文章目录1. 安装Zabbix 仓库2. 安装Zabbix server,Web前端, agent3. 创建初始数据库3.1创建Zabbix数据库并进行配置3.2导入初始架构和数据,系统将提示输入新创建的密码4. 为Zabbi

2021-04-15 16:36:08 846

原创 zipimport.ZipImportError: can‘t decompress data; zlib not available

在Ubuntu16.04上通过pyenv安装python3.6.8时出现以下错误,记录一下ubuntu@ubuntu:~$ pyenv install 3.6.8Installing Python-3.6.8...BUILD FAILED (Ubuntu 16.04 using python-build 1.2.19-8-gfec2aa3)Inspect or clean up the working tree at /tmp/python-build.20210415135301.18425

2021-04-15 14:00:28 660

原创 ubuntu20.04安装howdy

ubuntu20.04安装howdyhowdy是一款用于Linux系统的人脸识别身份验证系统,可以看作是Windows中的Windows Hello的替代品,howdy在安装的过程中会去外网下载一些安装包,所以前提条件是有访问外网的手段。howdy官网,安装过程的参考链接安装proxychains用于全局代理,不然只有访问外网的手段在终端中也是无法实现全局代理,最终会在下载包的过程中出现下面的失败情况#错误情况sudo dpkg -i howdy_2.6.1.deb(正在读取数据库 ... 系

2021-04-05 16:54:59 2388 1

原创 容器镜像加密-containerd imgcrypt实践

容器镜像加密-containerd imgcrypt实践

2021-03-15 21:28:20 7186 16

原创 go get得到的东西不在$GOPATH中

博主最近在ubuntu20.04上安装oci-image-tool,按照官方文档执行,结果第一步就发现go get得到的东西找不到,后来查阅了link这篇博客,发现了原因,是因为开了goproxy,设置了代理go env -w GO111MODULE=on$ go env -w GOPROXY=https://goproxy.cn,direct需要将其关闭go env -w GO111MODULE=off重新go get的得到的就在$GOPATH里面了...

2021-03-12 17:37:14 852

原创 ubuntu20.04安装skopeo

ubuntu20.04安装skopeo

2021-03-12 16:50:01 2954

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除