vigor代码阅读

源码地址:vigor_github
论文地址:vigor_paper
幻灯片地址:vigor_slide

环境搭建

代码中提供了setup.sh,可一键完成环境下载和配置。此外readme.md中提到的为了提高性能,配置hugepage=2M*4096,可使用命令echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages完成(默认hugepagesz=2M

但是在运行setup.sh过程中,因为实验室网络的原因,有很多配置如DPDK安装包和ocaml包等等下载不了。
于是我选择了作者提供的第二套方案——docker。此时如果单纯的运行Docker_build.sh,其实就是重新构造一个vigorimage,这时还是跟宿主机一个网络,同样还是不能完成下载。
然后我选择直接docker pull dslabepfl/vigor,用别人配置好的docker环境。pull完之后再运行setup.sh就可以完成环境配置。

代码阅读

框架

先选个NFvignat,进到对应目录。根据readme.md所说,输入make symbex validate完成对vignat的验证,观察运行结果。

观察vignat/Makefile,发现并没有目标文件,而是去包含了上级Makefile文件。

include $(abspath $(dir $(lastword $(MAKEFILE_LIST))))/../Makefile

跟着向上翻,发现按照我们的输入make参数,是会去继续包含Makefile.dpdk

ifeq (click,$(findstring click,$(shell pwd)))
# Click baselines
include $(SELF_DIR)/Makefile.click
else ifeq (nfos-,$(findstring nfos-,$(MAKECMDGOALS)))
# NFOS-related targets
include $(SELF_DIR)/Makefile.nfos
else ifeq (,$(findstring moonpol,$(abspath $(NF_DIR))))
# DPDK-based NFs
include $(SELF_DIR)/Makefile.dpdk
endif

跟着翻,发现有symbexvalidate目标,参数都可以在上述三个文件找到。

symbex
validate
其中clean目标在原本文件中,autogen目标在根目录的Makefile
autogen

主要是validate目标中执行的命令是切换到validator/目录去执行Makefile,跟着看看。发现vig%目标,其中%是通配符,$@表示目标文件,在图中代表vignat

validator/Makefile

这样再加上时间的输出结果,就可以发现我们以上的流程跟之前图示的输出结果基本一致,这样就大概能明白程序的流程,接下来就是一部分一部分代码深入去阅读。

Validator

参考论文中提到的验证的四个关键步骤,其中Validator完成了2,3,4三步。


validator目录中完成的大部分都是定理生成和定理证明的事情,所以需要用到更为专业的语言来完成工作,vigor中使用的就是OCaml函数式语言(VeriFast也是用了该语言)。第一次接触这种函数式语言,简单学习了一下

https://riptutorial.com/zh-CN/ocaml
https://ocaml.org/learn/tutorials/index.zh.html

观察validator/validator.ml文件。因为实在不熟悉OCaml,所以大部分情况都是靠猜,然后看了一下代码,觉得Verifier.verify_ir函数看起来像是在验证某些东西。

  match Verifier.verify_ir
          ir verifast_bin intermediate_fout
          verify_out_fname proj_root lino_fname
  with
  | Verifier.Valid -> printf "Valid.\n"
  | Verifier.Inconsistent -> printf "Inconsistent.\n"
  | Verifier.Invalid_seq -> printf "Invalid.\n"
  | Verifier.Invalid_rez _ -> printf "Invalid output.\n"

根据OCaml的命名规则,Verifier.verify_ir调用的是verifier.ml中的verify_ir函数(ml文件命名首字母小写,调用的时候大写)。vefirier.ml还是比较好看懂的,代码量也少,大概的意思就是完成上述步骤4的工作,调用verifast工具验证每条trace


首先第一行命令调用了Render.render_ir函数,其中~表示的是标签参数,即render_assertions这个参数复制为true,跟进看一下。

第一行let ir = discard_redundant_preconditions ir in根据命名猜一下,该函数的作用应该是去除多余的前置条件,再跟进。

其中~f的是~f:f的简写,具体如下:

跟进Ir.term_eq,发现个模式匹配,关键里面有一堆看不懂的函数,如Bop之类

搜一下,发现是个类似宏定义的存在,如Bop就是bopttermtterm三个参数组成,其中bop可以是各种运算,tterm是由递归定义完成,从而可以完成嵌套运算。

那么刚才的term_eq函数就可以,算了,我还是没看懂term_eq干了啥,那不妨猜一下吧,filter_redundant_preconditions函数可能是根据前后条件匹配关系,过滤掉了缺少后置条件的那些“多余”的前置条件。

未完待续

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342