CN111459500A - 基于海鹰翼辉操作系统的安全编译方法及装置 - Google Patents

基于海鹰翼辉操作系统的安全编译方法及装置 Download PDF

Info

Publication number
CN111459500A
CN111459500A CN202010551078.8A CN202010551078A CN111459500A CN 111459500 A CN111459500 A CN 111459500A CN 202010551078 A CN202010551078 A CN 202010551078A CN 111459500 A CN111459500 A CN 111459500A
Authority
CN
China
Prior art keywords
analysis
dependency graph
control
code
result
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010551078.8A
Other languages
English (en)
Inventor
周广蕴
王旭
田文龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Research Institute of Mechanical and Electrical Technology
Original Assignee
Beijing Research Institute of Mechanical and Electrical Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Research Institute of Mechanical and Electrical Technology filed Critical Beijing Research Institute of Mechanical and Electrical Technology
Priority to CN202010551078.8A priority Critical patent/CN111459500A/zh
Publication of CN111459500A publication Critical patent/CN111459500A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种基于海鹰翼辉操作系统的安全编译方法及装置,属于嵌入式操作系统技术领域,解决了现有的编译方法难以实现海鹰翼辉操作系统的高安全性和高质量等问题。对待编译的源程序进行代码扫描预处理,得到代码扫描预处理结果;对代码扫描预处理结果进行词法分析,得到单词序列;对单词序列中的结构设置进行语法分析,得到抽象语法树,其中,所述结构设置包括控制结构、数据类型和函数声明与参数表;基于抽象语法树进行语义分析,生成中间代码;对中间代码进行优化,生成目标代码。实现了代码格式、注释风格、字符集合法和条件编译的检查,提高了编译软件的安全性和质量。

Description

基于海鹰翼辉操作系统的安全编译方法及装置
技术领域
本发明涉及嵌入式操作系统技术领域,尤其涉及一种基于海鹰翼辉操作系统的安全编译方法及装置。
背景技术
随着武器装备系统在信息化、体系化、自主化和智能化等方面的飞速发展,软件的规模越来越大,关键程度越来越高,软件的质量与安全性已经成为影响产品质量与可靠性的重要因素。
当前,很多商用或者开源的安全编译方法,能够支持软件开发各阶段的测试和验证,但这些工具都是基于一些市场占有率较大的开发环境、操作系统和目标机进行了定制,比如:VxWorks、CCS等,但覆盖面有限,目前尚没有针对海鹰翼辉操作系统的安全编译方法及工具。另外,商用编译方法在使用上遵循国外通用的标准和规范,本地化工作只是简单的翻译,难以实现海鹰翼辉操作系统的高安全性和高质量的要求。
发明内容
鉴于上述的分析,本发明实施例旨在提供一种基于海鹰翼辉操作系统的安全编译方法及装置,用以解决现有的编译方法难以实现海鹰翼辉操作系统的高安全性和高质量要求等问题。
一方面,本发明实施例提供了一种基于海鹰翼辉操作系统的安全编译方法,包括如下步骤:
对待编译的源程序进行代码扫描预处理,以加载头文件和宏替换至源程序的相应位置,并进行代码格式、注释风格、字符集合法性及条件编译的检查,若检查合格,得到代码扫描预处理结果,若检查不合格,对报错位置进行修正,得到代码扫描预处理结果;
对所述代码扫描预处理结果进行词法分析,得到单词序列;
对所述单词序列中的结构设置进行语法分析,得到抽象语法树,其中,所述结构设置包括控制结构、数据类型和函数声明与参数表;
基于所述抽象语法树进行语义分析,生成中间代码;
对所述中间代码进行优化,生成目标代码。
进一步,所述语义分析包括安全性分析和动态语义分析;其中,所述安全性分析包括如下步骤:
基于所述抽象语法树进行控制流分析,得到控制依赖图;
基于所述控制依赖图进行数据流分析,得到数据依赖图;
基于所述控制依赖图和数据依赖图得到程序依赖图;
根据安全规则库检查所述程序依赖图,得到安全性分析结果。
进一步,基于所述抽象语法树进行控制流分析,得到控制依赖图包括如下步骤:
遍历抽象语法树,寻找并获取包括if、while、for和switch的控制语句;
基于所述控制语句进行递归计算并记录控制关系;
基于记录的所述控制关系得到控制依赖图。
进一步,基于所述控制依赖图进行数据流分析,得到数据依赖图包括如下步骤:
获取所述控制依赖图中每个节点的可达定值集;
基于所述可达定值集在控制依赖图上添加数据依赖边,得到数据依赖图。
进一步,所述安全规则库包括检查规则库、程序规范库和检查结果库;所述检查规则库,用于检查C/C++警告信息;所述程序规范库,用于检查C/C++语法规则信息;所述检查结果库,用于存储安全性分析结果;
根据安全规则库检查所述程序依赖图,得到安全性分析结果,包括:
获取所述程序依赖图中的C/C++程序规则信息,将所述C/C++程序规则信息与检查规则库匹配,得到规则检查结果;
获取所述程序依赖图中的C/C++语法定义信息,将所述C/C++语法定义信息与程序规范库匹配,得到语法检查结果;
基于所述规则检查结果和语法检查结果得到安全性分析结果。
进一步,基于所述抽象语法树进行动态语义分析,得到动态语义分析结果,其中,所述动态语义分析包括表达式和函数副作用的检查;
若所述安全性分析结果和动态语义分析结果不存在报错,直接生成中间代码;若所述安全性分析结果和动态语义分析结果存在报错,对所述报错的位置进行相应修正,修正完成后,生成中间代码。
另一方面,本发明实施例提供了一种基于海鹰翼辉操作系统的编译装置,包括预处理模块,用于对待编译的源程序进行代码扫描预处理,以加载头文件和宏替换至源程序的相应位置,并进行代码格式、注释风格、字符集合法性及条件编译的检查,若检查合格,得到代码扫描预处理结果,若检查不合格,对报错位置进行修正,得到代码扫描预处理结果;
词法分析模块,用于对所述代码扫描预处理结果进行词法分析,得到单词序列;
语法分析模块,用于根据所述单词序列中的结构设置进行语法分析,得到抽象语法树,其中,所述结构设置包括控制结构、数据类型和函数声明与参数表;
语义分析模块,用于根据所述抽象语法树进行语义分析,生成中间代码;
目标代码生成模块,用于对所述中间代码进行优化,生成目标代码。
进一步,所述语义分析模块包括安全性分析和动态语义分析;其中,所述安全性分析包括如下步骤:
基于所述抽象语法树进行控制流分析,得到控制依赖图;
基于所述控制依赖图进行数据流分析,得到数据依赖图;
根据所述控制依赖图和数据依赖图得到程序依赖图;
根据安全规则库检查所述程序依赖图,得到安全性分析结果。
进一步,基于所述抽象语法树进行控制流分析,得到控制依赖图包括如下步骤:
遍历抽象语法树,寻找并获取包括if、while、for和switch的控制语句;
基于所述控制语句进行递归计算并记录控制关系;
基于记录的所述控制关系得到控制依赖图。
进一步,基于所述控制依赖图进行数据流分析,得到数据依赖图包括如下步骤:
获取所述控制依赖图中每个节点的可达定值集;
基于所述可达定值集在控制依赖图上添加数据依赖边,得到数据依赖图。
与现有技术相比,本发明至少可实现如下有益效果之一:
1、基于海鹰翼辉操作系统的安全编译方法,在完成代码扫描预处理的同时,实现了代码格式、注释风格、字符集合法和条件编译的检查,在完成语法分析的同时,实现了标识符命名规则的检查,控制结构完整性、数据类型、函数声明与参数表的检查,在完成动态语义分析的同时,实现了表达式、函数副作用的检查,即在编译的过程中提前对源代码进行规则检查,提高了安全性。
2、在语法分析的过程中进行程序流和控制流的分析得到程序依赖图,并基于安全规则库对程序依赖图进行规则和规范检查,提前获得源程序存在的安全漏洞并修正,提高了编译软件的质量。
3、基于海鹰翼辉操作系统的安全编译装置,包括预处理模块和语法分析模块。其中,预处理模块在完成代码扫描预处理的同时,实现了代码格式、注释风格、字符集合法和条件编译的检查,语法分析模块在完成语法分析的同时,实现了标识符命名规则的检查,控制结构完整性、数据类型、函数声明与参数表的检查,即在编译的过程中提前对源代码进行规则检查,提高了安全性。
4、语义分析模块使用数据流分析技术和控制流分析技术实现代码的静态分析,从而保证代码的分析结果是经过理解上下文含义获得的,提高了编译软件的可靠性,并根据安全规则库对程序依赖图进行规则和规范检查,提前检查源程序存在的安全漏洞并修正,提高了编译软件的质量。
本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。
附图说明
附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。
图1为一个实施例中基于海鹰翼辉操作系统的安全编译方法流程图;
图2为一个实施例中检查结果输出流程图;
图3为另一个实施例中基于海鹰翼辉操作系统的安全编译装置结构图;
附图标记:
100-预处理模块,200-词法分析模块,300-语法分析模块,400-语义分析模块,500-目标代码生成模块。
具体实施方式
下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
目前,现有技术没有针对海鹰翼辉操作系统的安全编译方法及工具。现有的商用编译方法在使用上遵循国外通用的标准和规范,本地化工作只是简单的翻译,难以实现海鹰翼辉操作系统的高安全性和高质量的要求。为此,本申请提出一种基于海鹰翼辉操作系统的安全编译方法及装置,在代码编译的过程中能够实现代码格式、注释风格、字符集合法、条件编译、标识符命名规则、控制结构完整性、数据类型、函数声明与参数表、表达式、函数副作用等检查,提高了编译软件的安全性,同时可对源程序做静态数据流和控制流分析,以检查编译过程中存在的漏洞,提高编译软件的质量。
本发明的一个具体实施例,公开了一种基于海鹰翼辉操作系统的安全编译方法,如图1所示。包括如下步骤:
步骤S1、对待编译的源程序进行代码扫描预处理,以加载头文件和宏替换至源程序的相应位置,并进行代码格式、注释风格、字符集合法性及条件编译的检查,若检查合格,得到代码扫描预处理结果,若检查不合格,对报错位置进行修正,得到代码扫描预处理结果。
具体的,代码扫描预处理是基于海鹰翼辉操作系统的C语言编译的第一个操作步骤,基于待编译的源程序,代码扫描预处理就是将源程序中的头文件解开并替换至源程序相应的位置,同时实现源程序中的宏替换。加载源文件和宏替换完成后进行代码格式、注释风格、字符集合法性及条件编译的检查,若检查不合格,对报错位置进行修正,得到代码扫描预处理结果。对源文件中的代码格式、注释风格、字符集合法性及条件编译进行检查,可提前检查源程序中存在的错误,并及时对相应的错误进行修正,提高了安全性。
代码格式检查指检查源程序中代码格式的正确性。示例性的,检查同级别的语句是否对齐,是否多个语句写在同一行,是否将if或else的字句写在下一行,以方便调试。
注释风格检查指检索头文件和函数的注释并检查格式是否正确,其中,注释均采用“/*…*/”和“//”两种格式。
字符集合法性检查指检查源代码中的字符集是否满足C++语言编程子集。
条件编译检查指检查宏是否已定义或者宏是否满足条件。
步骤S2、对代码扫描预处理结果进行词法分析,得到单词序列。
具体的,词法分析阶段是编译过程的一个必要阶段,具体是从左到右、从上到下依次读入源程序中的字符,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析的核心任务是扫描、识别单词且对识别出的单词给出定性、定长的处理。同时,还可以基于构词规则对关键字进行分类,以节省目标代码生成的时间,提高编译效率。
步骤S3、对单词序列中的结构设置进行语法分析,得到抽象语法树,其中,结构设置包括控制结构、数据类型和函数声明与参数表。
具体来说,语法分析是编译过程的一个逻辑阶段,语法分析主要是判断源程序的控制结构、数据类型和函数声明与参数表是否正确,具体是在词法分析的基础上将单词序列组合成各类语法短语,如程序、语句、表达式等等。目前,就产生抽象语法树的语法分析包括自下而上和自上而下两大类。自上而下语法分析方法,给定文法G和源程序串r,从文法G的开始符号S出发,通过反复使用产生式对句型中的非终结符进行替换(推导),逐步推导出源程序串r。自下而上语法分析方法,从给定的输入串r开始,不断寻找子串与文法G中某个产生式P的候选式进行匹配,并用某个产生式P的左部代替(归约),逐步归约到开始符号S。除此之外,基于海鹰翼辉操作系统,还可以对一些接口进行语法分类,以提高编译的安全性。
对控制结构进行语法分析指对源程序的流程控制结构和选择控制结构进行分析。对数据类型进行语法分析指检查所定义的标识符类型是否与数据类型相匹配。对函数声明与参数表进行语法分析指检查所申明函数是否带有返回值以及返回值的类型,同时检查所申明函数的参数个数和类型。
基于数据类型的检查结果正确的条件下,将控制结构和函数声明与参数表分析的结果以语法树的形式表示,则得到抽象语法树。
步骤S4、基于抽象语法树进行语义分析,生成中间代码。
具体来说,语义分析包括对源代码的安全性分析和动态语义分析。其中,动态语义分析包括表达式和函数副作用的检查。基于语义分析得到的安全性分析结果和动态语义分析结果,若两者皆不存在报错,则直接生成中间代码;若两者任一存在报错,则需对报错的位置进行相应修正,修正完成后,生成中间代码。
基于语义分析得到的抽象语法树进行表达式和函数副作用的检查,指沿着抽象语法树的节点分析被调用函数除了返回函数值之外,对主调用函数产生的附加影响,同时,对表达式的合法性进行分析,示例性的,除数为0即表明表达式不合法。表达式的检查与函数副作用的检查结果共同组成了动态语义分析的结果。
其中,安全性分析包括控制流分析和数据流分析,且控制流分析先与数据流分析。安全性分析包括如下步骤:
步骤S401、基于抽象语法树进行控制流分析,得到控制依赖图。具体来说,基于抽象语法树进行控制流分析,得到控制依赖图包括如下步骤:首先,遍历抽象语法树,寻找并获取包括if、while、for和switch的控制语句;对包括if、while、for和switch的控制语句进行递归计算并记录控制关系,直到找不到控制关系为止;最后将记录的控制关系转化成图形得到控制依赖图。
步骤S402、基于控制依赖图进行数据流分析,得到数据依赖图。具体地,为了建立程序的数据依赖关系,首先必须获取控制依赖图中每个节点的可达定值集,其中,每个节点的可达定值集为进入节点之前的可达定值集与该节点产生的变量定义之和再减去对应语句在程序中注销的定值集合。基于得到的可达定值集,在控制依赖图上添加数据依赖边,得到数据依赖图。
步骤S403、基于控制依赖图和数据依赖图得到程序依赖图。具体的,控制依赖图和数据依赖图组合即可得到程序依赖图。
步骤S404、根据安全规则库检查程序依赖图,得到安全性分析结果。
具体的,根据安全规则库中定义的安全规则与程序依赖图中包含的程序流程及语法定义进行比对,检查是否有违反安全规则库的代码,或者检查是否有违反安全规则库中定义的代码行号和定义的代码名称。安全性分析结果即为程序依赖图中的程序流程和语法定义满足各项规则的结果,若存在规则不匹配情况,则系统生成警告信息。其中,安全规则库包括检查规则库、程序规范库和检查结果库;检查规则库用于检查C/C++警告信息;程序规范库用于检查C/C++语法规则信息,检查结果库用于存储检查结果。
基于上述得到的动态语义分析的结果和安全性分析结果,若两者中均不存在错误信息,则运行源代码得到中间代码,若动态语义分析的结果和安全性分析的结果两者任一存在错误信息,此时无法运行源程序,只有在解决了动态语义分析的结果和安全性分析结果的相应位置处的错误后才能运行源程序,生成中间代码。
步骤S5、对中间代码进行优化,生成目标代码。具体的,在编译阶段先将一些简单的算法完成,在程序运行阶段就不需要再处理这些计算了,示例性的,如常量折叠优化。目标代码就是将中间代码转化为绝对机器上的指令代码,这样可以节省时间和空间,从而提高程序的运行效率。
与现有技术相比,本实施例提供的基于海鹰翼辉操作系统的安全编译方法,在完成代码扫描预处理的同时,实现了代码格式、注释风格、字符集合法和条件编译的检查,在完成语法分析的同时,实现了标识符命名规则的检查,控制结构完整性、数据类型、函数声明与参数表的检查,在完成动态语义分析的同时,实现了表达式、函数副作用的检查,即在编译的过程中提前对源代码进行规则检查,提高了安全性。同时,在语法分析的过程中进行程序流和控制流的分析得到程序依赖图,并基于安全规则库对程序依赖图进行规则和规范检查,提前获得源程序存在的安全漏洞并修正,提高了编译软件的质量。
本申请中提供的基于海鹰翼辉操作系统的安全编译方法还可以实现安全规则库中检查结果的界面显示功能。具体的,如图2所示,基于检查规则库和编程规范库中定义的安全规则与程序依赖图中的程序流程和语法定义进行比对,检查是否存在违反安全规则的代码行号和定义的代码名称,得到安全性分析结果,并将该安全性分析结果存入结果检查库,基于该结果检查库生成检查结果的报表并输出至浏览器或用户界面,以供用户查看和存档,实现了源代码检查结果的可视化,提高了用户的体验度和满意度。
本发明的另一个具体实施例,公开了一种基于海鹰翼辉操作系统的安全编译装置,如图3所示,包括预处理模块100,用于对待编译的源程序进行代码扫描预处理,以加载头文件和宏替换至源程序的相应位置,并进行代码格式、注释风格、字符集合法性及条件编译的检查,若检查合格,得到代码扫描预处理结果,若检查不合格,对报错位置进行修正,得到代码扫描预处理结果;词法分析模块200,用于对代码扫预处理结果中的关键字进行词法分析,得到单词序列;语法分析模块300,用于根据单词序列中的结构设置进行语法分析,得到抽象语法树,其中,结构设置包括控制结构、数据类型和函数声明与参数表;语义分析模块400,用于根据抽象语法树进行语义分析,生成中间代码;目标代码生成模块500,用于对中间代码进行优化,生成目标代码。
具体的,预处理模块除了具备对待编译的源程序加载头文件和宏替换至源程序的相应位置,并进行代码格式、注释风格、字符集合法性及条件编译的检查外,预处理模块还可以支持解析项目工程文件,获取工程文件中的全部源代码信息,使得后续的编译在获取的所述源代码基础上进行。
一种基于海鹰翼辉操作系统的安全编译装置,包括预处理模块、语法分析模块和语义分析模块。其中,预处理模块在完成代码扫描预处理的同时,实现了代码格式、注释风格、字符集合法和条件编译的检查,语法分析模块在完成语法分析的同时,实现了标识符命名规则的检查,控制结构完整性、数据类型、函数声明与参数表的检查,语义分析模块使用数据流分析技术和控制流分析技术实现代码的静态分析,从而保证代码的分析结果是经过理解上下文含义获得的,并根据安全规则库对程序依赖图进行规则和规范检查,提前检查源程序存在的安全漏洞并修正,提高了编译软件的质量。
优选地,语义分析模块包括安全性分析和动态语义分析;其中,所述安全性分析包括如下步骤:
基于所述抽象语法树进行控制流分析,得到控制依赖图;
基于所述控制依赖图进行数据流分析,得到数据依赖图;
根据所述控制依赖图和数据依赖图得到程序依赖图;
根据安全规则库检查所述程序依赖图,得到安全性分析结果。
具体的,安全规则库包括检查规则库、程序规范库和检查结果库;其中,检查规则库用于检查C/C++警告信息;程序规范库用于检查C/C++语法规则信息,检查结果库用于存储检查结果。根据安全规则库中定义的安全规则与程序依赖图中包含的程序流程及语法定义进行比对,检查是否有违反安全规则库的代码,或者检查是否有违反安全规则库中定义的代码行号和代码名称。
通过语义分析模块,使用数据流分析技术和控制流分析技术实现代码的静态分析,从而保证代码的分析结果是经过理解上下文含义获得的,同时,基于程序流和控制流的分析得到程序依赖图,并根据安全规则库对程序依赖图进行规则和规范检查,提前检查源程序存在的安全漏洞并修正,提高了编译软件的质量。
优选地,基于抽象语法树进行控制流分析,得到控制依赖图包括如下步骤:
遍历抽象语法树,寻找并获取包括if、while、for和switch的控制语句;
基于所述控制语句进行递归计算并记录控制关系;
基于记录的所述控制关系得到控制依赖图。
优选地,基于控制依赖图进行数据流分析,得到数据依赖图包括如下步骤:
获取所述控制依赖图中每个节点的可达定值集;
基于所述可达定值集在控制依赖图上添加数据依赖边,得到数据依赖图。
通过使用数据流分析技术和控制流分析技术实现代码的静态分析,数据流和控制流相互结合的方式,可以全面检查源代码中存在的安全漏洞,以致于及时发现安全隐患并排除,提高了编译装置的安全性和质量性能。
本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

Claims (10)

1.一种基于海鹰翼辉操作系统的安全编译方法,其特征在于,包括如下步骤:
对待编译的源程序进行代码扫描预处理,以加载头文件和宏替换至源程序的相应位置,并进行代码格式、注释风格、字符集合法性及条件编译的检查,若检查合格,得到代码扫描预处理结果,若检查不合格,对报错位置进行修正,得到代码扫描预处理结果;
对所述代码扫描预处理结果进行词法分析,得到单词序列;
对所述单词序列中的结构设置进行语法分析,得到抽象语法树,其中,所述结构设置包括控制结构、数据类型和函数声明与参数表;
基于所述抽象语法树进行语义分析,生成中间代码;
对所述中间代码进行优化,生成目标代码。
2.根据权利要求1所述的基于海鹰翼辉操作系统的安全编译方法,其特征在于,所述语义分析包括安全性分析和动态语义分析;其中,所述安全性分析包括如下步骤:
基于所述抽象语法树进行控制流分析,得到控制依赖图;
基于所述控制依赖图进行数据流分析,得到数据依赖图;
基于所述控制依赖图和数据依赖图得到程序依赖图;
根据安全规则库检查所述程序依赖图,得到安全性分析结果。
3.根据权利要求2所述的基于海鹰翼辉操作系统的安全编译方法,其特征在于,基于所述抽象语法树进行控制流分析,得到控制依赖图包括如下步骤:
遍历抽象语法树,寻找并获取包括if、while、for和switch的控制语句;
基于所述控制语句进行递归计算并记录控制关系;
基于记录的所述控制关系得到控制依赖图。
4.根据权利要求3所述的基于海鹰翼辉操作系统的安全编译方法,其特征在于,基于所述控制依赖图进行数据流分析,得到数据依赖图包括如下步骤:
获取所述控制依赖图中每个节点的可达定值集;
基于所述可达定值集在控制依赖图上添加数据依赖边,得到数据依赖图。
5.根据权利要求4所述的基于海鹰翼辉操作系统的安全编译方法,其特征在于,所述安全规则库包括检查规则库、程序规范库和检查结果库;所述检查规则库,用于检查C/C++警告信息;所述程序规范库,用于检查C/C++语法规则信息;所述检查结果库,用于存储安全性分析结果;
根据安全规则库检查所述程序依赖图,得到安全性分析结果,包括:
获取所述程序依赖图中的C/C++程序规则信息,将所述C/C++程序规则信息与检查规则库匹配,得到规则检查结果;
获取所述程序依赖图中的C/C++语法定义信息,将所述C/C++语法定义信息与程序规范库匹配,得到语法检查结果;
基于所述规则检查结果和语法检查结果得到安全性分析结果。
6.根据权利要求5所述的基于海鹰翼辉操作系统的安全编译方法,其特征在于,基于所述抽象语法树进行动态语义分析,得到动态语义分析结果,其中,所述动态语义分析包括表达式和函数副作用的检查;
若所述安全性分析结果和动态语义分析结果不存在报错,直接生成中间代码;若所述安全性分析结果和动态语义分析结果存在报错,对所述报错的位置进行相应修正,修正完成后,生成中间代码。
7.一种基于海鹰翼辉操作系统的编译装置,其特征在于,包括:
预处理模块,用于对待编译的源程序进行代码扫描预处理,以加载头文件和宏替换至源程序的相应位置,并进行代码格式、注释风格、字符集合法性及条件编译的检查,若检查合格,得到代码扫描预处理结果,若检查不合格,对报错位置进行修正,得到代码扫描预处理结果;
词法分析模块,用于对所述代码扫描预处理结果进行词法分析,得到单词序列;
语法分析模块,用于根据所述单词序列中的结构设置进行语法分析,得到抽象语法树,其中,所述结构设置包括控制结构、数据类型和函数声明与参数表;
语义分析模块,用于根据所述抽象语法树进行语义分析,生成中间代码;
目标代码生成模块,用于对所述中间代码进行优化,生成目标代码。
8.根据权利要求7所述的基于海鹰翼辉操作系统的编译装置,其特征在于,所述语义分析模块包括安全性分析和动态语义分析;其中,所述安全性分析包括如下步骤:
基于所述抽象语法树进行控制流分析,得到控制依赖图;
基于所述控制依赖图进行数据流分析,得到数据依赖图;
根据所述控制依赖图和数据依赖图得到程序依赖图;
根据安全规则库检查所述程序依赖图,得到安全性分析结果。
9.根据权利要求8所述的基于海鹰翼辉操作系统的编译装置,其特征在于,基于所述抽象语法树进行控制流分析,得到控制依赖图包括如下步骤:
遍历抽象语法树,寻找并获取包括if、while、for和switch的控制语句;
基于所述控制语句进行递归计算并记录控制关系;
基于记录的所述控制关系得到控制依赖图。
10.根据权利要求9所述的基于海鹰翼辉操作系统的编译装置,其特征在于,基于所述控制依赖图进行数据流分析,得到数据依赖图包括如下步骤:
获取所述控制依赖图中每个节点的可达定值集;
基于所述可达定值集在控制依赖图上添加数据依赖边,得到数据依赖图。
CN202010551078.8A 2020-06-17 2020-06-17 基于海鹰翼辉操作系统的安全编译方法及装置 Pending CN111459500A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010551078.8A CN111459500A (zh) 2020-06-17 2020-06-17 基于海鹰翼辉操作系统的安全编译方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010551078.8A CN111459500A (zh) 2020-06-17 2020-06-17 基于海鹰翼辉操作系统的安全编译方法及装置

Publications (1)

Publication Number Publication Date
CN111459500A true CN111459500A (zh) 2020-07-28

Family

ID=71683950

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010551078.8A Pending CN111459500A (zh) 2020-06-17 2020-06-17 基于海鹰翼辉操作系统的安全编译方法及装置

Country Status (1)

Country Link
CN (1) CN111459500A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112346722A (zh) * 2020-11-11 2021-02-09 苏州大学 一种实现编译型嵌入式Python的方法
CN112947909A (zh) * 2021-03-21 2021-06-11 北京长亭未来科技有限公司 一种动态编程语言的重构方法及装置
CN113778899A (zh) * 2021-09-28 2021-12-10 广州四三九九信息科技有限公司 一种在Lua代码编译前检查语法错误和性能的方法
CN116149670A (zh) * 2023-04-21 2023-05-23 湖南泛联新安信息科技有限公司 一种基于图的hdl编译优化方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107832059A (zh) * 2017-11-21 2018-03-23 广州视源电子科技股份有限公司 一种基于Makefile的代码静态分析方法和装置
CN109918294A (zh) * 2019-01-29 2019-06-21 刘建鹏 一种混源软件自主可控性检测方法及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107832059A (zh) * 2017-11-21 2018-03-23 广州视源电子科技股份有限公司 一种基于Makefile的代码静态分析方法和装置
CN109918294A (zh) * 2019-01-29 2019-06-21 刘建鹏 一种混源软件自主可控性检测方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
梁婕: "一种静态代码安全分析系统的设计与实现", 《中国优秀硕士学位论文全文数据库(电子期刊)信息科技辑》 *
赵晖: "面向军工应用软件的源代码漏洞分析系统的研究与实现", 《中国优秀硕士学位论文全文数据库(电子期刊)信息科技辑》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112346722A (zh) * 2020-11-11 2021-02-09 苏州大学 一种实现编译型嵌入式Python的方法
CN112947909A (zh) * 2021-03-21 2021-06-11 北京长亭未来科技有限公司 一种动态编程语言的重构方法及装置
CN113778899A (zh) * 2021-09-28 2021-12-10 广州四三九九信息科技有限公司 一种在Lua代码编译前检查语法错误和性能的方法
CN116149670A (zh) * 2023-04-21 2023-05-23 湖南泛联新安信息科技有限公司 一种基于图的hdl编译优化方法
CN116149670B (zh) * 2023-04-21 2023-07-11 湖南泛联新安信息科技有限公司 一种基于图的hdl编译优化方法

Similar Documents

Publication Publication Date Title
CN111459500A (zh) 基于海鹰翼辉操作系统的安全编译方法及装置
Ding et al. Patching as translation: the data and the metaphor
US9122540B2 (en) Transformation of computer programs and eliminating errors
US11775414B2 (en) Automated bug fixing using deep learning
KR101554424B1 (ko) 테스트 케이스 생성 자동화 방법 및 장치
US7779049B1 (en) Source level optimization of regular expressions
Tran et al. Does BLEU score work for code migration?
CN117009231B (zh) 基于对话式大语言模型的高可靠单元测试自动生成方法及装置
Kaufman et al. Prioritizing mutants to guide mutation testing
Annamaa et al. An interactive tool for analyzing embedded SQL queries
Lin et al. Automated comment update: How far are we?
Yu et al. Automated assertion generation via information retrieval and its integration with deep learning
Haque et al. Action word prediction for neural source code summarization
Huq et al. Review4Repair: Code review aided automatic program repairing
CN115309451A (zh) 代码克隆检测方法、装置、设备、存储介质及程序产品
CN108563561B (zh) 一种程序隐性约束提取方法及系统
Fry et al. Clustering static analysis defect reports to reduce maintenance costs
CN114911711A (zh) 一种代码缺陷分析方法、装置、电子设备及存储介质
CN116089302A (zh) 一种针对Rust编程语言中UNSAFE代码片段缺陷的检测方法
CN112965909A (zh) 测试数据、测试用例生成方法及系统、存储介质
CN111966578A (zh) 一种安卓兼容性缺陷修复效果的自动化评估方法
KR100501936B1 (ko) 소스 코드 검사 시스템 및 방법
CN110659200A (zh) 航空机载软件的源码和目标码对比分析方法及系统
Wang et al. WheaCha: A method for explaining the predictions of models of code
CN110727428B (zh) 一种转换业务逻辑层代码的方法、装置和电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200728