当前位置: 首页 > 专利查询>浙江大学专利>正文

一种基于形式化方法的ST语言编译器测试工具技术

技术编号:35026675 阅读:20 留言:0更新日期:2022-09-24 22:58
本发明专利技术公开了一种基于形式化方法的ST语言编译器测试工具,该工具通过形式化方法为ST语言的执行制定了基准,不仅可以指导ST编译器的测试和实现,还可以为ST程序本身的分析提供支持。该测试工具包括四个部分:ST语言的形式化定义模块、程序模糊测试模块、程序变异模块以及编译器测试模块。该工具基于IEC 61131

【技术实现步骤摘要】
一种基于形式化方法的ST语言编译器测试工具


[0001]本专利技术涉及工业控制系统安全领域,尤其涉及一种基于形式化方法的ST语言编译器测 试工具。

技术介绍

[0002]可编程逻辑控制器(PLC)负责在制造业、公共基础设施等各种现代工业系统中实现过 程控制的自动化。确保PLC的正常运行至关重要,因为任何与功能或安全相关的缺陷都可 能导致系统发生严重事故。
[0003]大多数PLC使用IEC 61131

3国际标准中定义的语言进行编程。程序可以用梯形图(LD) 等图形化语言进行编写,该标准也提供了Structured Text(ST),一种基于将代码组织成“功能 块”思想的纯文本编程语言,其语法设计类似于Pascal。ST是一种特别重要的IEC 61131

3语 言,越来越多的工业代码都通过ST语言进行编写,因为它不仅便于数据处理,而且其他图 形语言实际上也会存在ST语言编写的代码片段。因此,当代码在PLC上运行时,确保ST 程序仅表现出预期行为非常重要。目前已经有了很多针对PLC程序的分析和验证工作,大量 工作试图将PLC程序转换为适合使用现有验证器或检查器的中间语言或另一种编程语言。 这些工作的问题是在转换过程中缺乏对等价性的分析和证明。此外,这些验证通常也是有限 的(因为现有工具不是为PLC设计的),并且不提供源代码级别的反馈。更重要的是,在ST 程序的设置实施过程中,由厂商所提供的解释器和编译器的正确性并没有引起足够重视。而 编译器中可能存在的漏洞不易检查并可能影响大量的PLC程序,但由于缺乏ST语言的形式 化语义,很难确定其编译器的正确性。而导致形式化定义缺失的关键因素包括两个方面:首 先,没有足够的文档来定义或描述ST语言的完整特性。例如,官方文档仅通过几个例子介 绍了语言特性,读者很难在此基础上完全理解语言的行为。其次,不同供应商(例如 Allen

Bradley、Siemens)提供的ST编译器可以以不同的方式实现该语言,并且它们代码的 闭源性质使得难以系统全面地评估它们的行为方式(除了通过手动观察)。本专利技术参考官方文 档中的定义和代码示例以及多家厂商提供的指导手册,通过K框架实现了ST语言的形式化 定义,并在此基础上提出了针对ST编译器的测试框架。

技术实现思路

[0004]本专利技术的目的在于针对现有技术的不足,提供一种完整可用的ST语言形式化定义及编 译器测试框架,实现对PLC编译器中可能存在的漏洞的检测。
[0005]本专利技术的目的是通过以下技术方案来实现的:一种基于形式化方法的ST语言编译器测 试工具,包括ST语言的形式化定义模块、程序模糊测试模块、程序变异模块以及编译器测 试模块;
[0006](1)ST语言的形式化定义模块使用K框架形式化地定义ST语言的语法、语义和运行环境, 模拟标准的ST语言执行过程,能够实现ST源程序的解析和模拟运行,生成具体的运行结果;
[0007](2)程序模糊测试模块用于实现测试过程中程序输入的变异,引导程序进行深层次的运行;
[0008](3)程序变异模块用于实现程序本身变异,能够提高测试程序的多样性;
[0009](4)编译器测试模块基于ST种子程序以及变体同时调用待测编译器以及ST语言的形式化 定义模块,比较两者的运行结果,通过其中的不一致发现编译器中可能存在的漏洞。
[0010]进一步地,所述ST语言的形式化定义模块中,ST语言的语法和语义来源于IEC 61131

3 标准以及不同厂商的具体实现,例如Codesys、CX等,然后基于K框架形式化地定义ST语 言的语法和语义,并设计模拟运行环境以实现ST源程序的模拟运行。
[0011]进一步地,所述ST语言的形式化语法用于实现对ST源程序的解析,包括程序结构、数 据类型、语句格式、调用逻辑等。
[0012]进一步地,所述ST语言的形式化语义用于指定程序的具体执行方式,包括数值运算、 逻辑运算、控制语句的执行、变量读写、函数及函数块调用方式等。
[0013]进一步地,所述模拟运行环境用于模拟程序正常执行过程中的数据段、代码段以及堆栈, 是实现程序运行的基础。
[0014]进一步地,所述程序模糊测试模块中,通过对程序输入的修改,尝试增加对程序的代码 覆盖率,增加发现深层编译问题的可能。
[0015]进一步地,所述程序变异模块中,程序变异以语义覆盖为指标,通过监控程序执行期间 程序语义的执行次数,发现很少触发的语义,然后通过变异引入相关语义。
[0016]进一步地,所述编译器测试模块中,运行结果的不一致包括运行状态(完成或中断)不 一致、运行状态相同但运行结果不同(完整运行但运行结果不同或运行中断但中断位置不同)。
[0017]本专利技术的有益效果是:本专利技术提出的基于形式化方法的Structured Text编译器测试工具, 有效弥补了现有工业控制系统安全分析中的遗漏。作为第一个针对工业控制系统编译器安全 性的分析工具,可以有效发现程序编译过程中可能由编译器引入的安全问题。此外,ST语言 的形式化定义也可以为本身程序的分析提供支持。本专利技术方法以形式化方法作为基础,可扩 展性好,使用便利。
附图说明
[0018]图1是本专利技术实施例测试流程图。
[0019]图2是本专利技术实施例基于形式化方法定义的ST语言模拟运行环境示意图。
具体实施方式
[0020]下面结合附图和具体实施例对本专利技术作进一步详细说明。
[0021]本专利技术提供了一种基于形式化方法的ST语言编译器测试工具,该测试工具由四个部分 构成:ST语言的形式化定义模块、程序模糊测试模块、程序变异模块以及编译器测试模块。 该测试工具通过形式化定义ST语言的语义语法进而实现ST语言在标准情况下的模拟执行, 然后针对ST源程序在尽可能保证语法语义正确的情况下对程序进行多轮变异,并最后在大 量变异程序基础上自动化地调用ST语言的形式化定义模块以及待测编译器,并
对两者的运 行结果进行比对,实现对编译器正确性的检测。专利技术的整体框架如附图1所示。
[0022]ST语言的形式化定义模块:通过以IEC 61131

3标准为基础,对照主流PLC厂商的具体 实现,实现ST语言中关键元素的梳理。根据梳理的ST语言关键组成成分,通过K框架对 ST语言进行形式化的定义,具体来说主要包括ST语言的语法、语义以及模拟运行环境。其 中语法主要用于程序解析,语法的定义过程会声明语言的整体架构、数据类型、支持的运算 符及相应的优先级关系,支持的功能函数以及语句格式等。语义则用来制定语法的具体含义 即执行方式,包括制定基础的数值运算、逻辑运算、控制语句的执行、变量读写、函数及函 数块调用方式等。模拟运行环境则模拟程序运行所必须的数据段、代码段以及堆栈,辅助实 现程序运行过程中的数据存储、程序栈切换、程序输入输出等行为。表1中展示了语法语义 的覆盖范围。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于形式化方法的ST语言编译器测试工具,其特征在于:包括ST语言的形式化定义模块、程序模糊测试模块、程序变异模块以及编译器测试模块;(1)ST语言的形式化定义模块使用K框架形式化地定义ST语言的语法、语义和运行环境,模拟标准的ST语言执行过程,能够实现ST源程序的解析和模拟运行,生成具体的运行结果;(2)程序模糊测试模块用于实现测试过程中程序输入的变异,引导程序进行深层次的运行;(3)程序变异模块用于实现程序本身变异,能够提高测试程序的多样性;(4)编译器测试模块基于ST种子程序以及变体同时调用待测编译器以及ST语言的形式化定义模块,比较两者的运行结果,通过其中的不一致发现编译器中可能存在的漏洞。2.根据权利要求1所述的一种基于形式化方法的ST语言编译器测试工具,其特征在于,所述ST语言的形式化定义模块中,ST语言的语法和语义来源于IEC 61131

3标准以及不同厂商的具体实现,然后基于K框架形式化地定义ST语言的语法和语义,并设计模拟运行环境以实现ST源程序的模拟运行。3.根据权利要求2所述的一种基于形式化方法的ST语言编译器测试工具,其特征在于,所述ST语言的形式化...

【专利技术属性】
技术研发人员:王坤赵成成王竟亦程鹏陈积明
申请(专利权)人:浙江大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1