支持安全编译算法的高可靠嵌入式C语言编辑器的设计
2011-11-23韩雪
韩 雪
(黑河学院计算机科学与信息工程系,黑龙江 黑河 164300)
支持安全编译算法的高可靠嵌入式C语言编辑器的设计
韩 雪
(黑河学院计算机科学与信息工程系,黑龙江 黑河 164300)
使用高可靠的编辑器进行软件设计将从设计源头为嵌入式系统的开发提供更多的安全保障.以支持控制流检测算法的编辑器为例,设计了3个高可靠特色功能模块,实现了编辑器对安全编译扩展语法的识别、对安全编译器控制流检测层编译信息的显示、对语法安全子集的支持;使用动态配置文件的方法实现了对多种高可靠安全编译算法的语法加亮功能.
嵌入式;安全编译;编辑器
0 引 言
随着嵌入式系统应用的不断扩展与深入,C语言以其灵活的编程风格、可以自定义结构、可移植性强、可直接对硬件编程等优点,成为嵌入式软件开发的首选语言.为了更好地适应嵌入式系统的应用特点,在原有C语言基础上又进一步提出了以精简、有效、可靠、可重用为目标的嵌入式C语言[1].
该文设计开发的是支持以带有控制流检测技术为代表的安全嵌入式C语言编译器的编辑器.该编辑器除了具有传统嵌入式C语言编辑器的基本功能之外,还具有支持高可靠安全编译器、支持多种安全编译算法的语法加亮和支持专有语法安全子集等功能,如图1所示.
图1 编辑器系统模块示意图Fig.1 Module schematic diagram for editor system
1 高可靠安全编译支持模块
在编辑器的使用过程中,为了更好地支持并配合安全编译器的工作,设计了一个安全编译支持模块来允许用户自定义所选用的安全编译算法所对应的特殊语法和特殊安全指令.由于目前尚没有统一的安全编译算法和规范,用户选用何种安全编译方式具有一定的随机性,因此,将安全编译支持模块设计成通用的处理模式.从总体需求角度看,该设计中的通用安全编译支持模块具有以下3个子功能(图2).
图2 安全编译支持模块功能图Fig.2 Diagram for the functions of the module supporting security compilation
1.1对扩充安全编译语法子集的识别
此项功能是确保用户进行安全嵌入式C语言开发的前提.用户在执行编译程序之前必须采用编辑器进行代码的编辑,由于安全编译器的特殊性,要求用户不仅要输入原有的嵌入式C语言语法的业务函数代码,还要输入用于安全检测的安全编译子集中的扩充语法.这样,就要求编辑器不仅能识别原有的传统嵌入式C语言语法,还要能识别用户输入的与安全编译相关的扩充语法.
设计中采用了配置文件的方法,即用户按照设定的配置文件脚本编写规程,针对自己选用的安全编译算法编写其所用到的特殊指令和语法.这样,用户在使用编辑器进行程序编辑和调试时,只需在编辑之前指定其安全编译支持的配置文件即可.在编辑过程中,安全编译器支持模块会根据相应的配置文件信息,对其补充的特殊语法进行特殊标记.
1.2 对安全编译器调用接口的支持
带有安全检测功能的编译器相对于原有传统嵌入式C语言编译器有很大的差别,具体表现在编译命令和编译参数的不同、编译文件的不同、生成文件和反馈结果的不同等等.这就要求编辑器编辑完成后要根据需求为下一步的编译调用准备相关的文件及命令代码.
设计中构造了一个安全编译器调用模块,用来对编辑后的带有安全检测代码的嵌入式C语言文件进行编译.这个模块在接到上级管理模块的编译器调用命令后,首先到系统配置文件中读取本次编译采用的安全编译支持算法,根据该算法找到相应的安全编译器可执行主体;然后,到安全编译器可执行主体存放目录中查找该安全编译器,若查找成功,则根据配置文件中的编译调用配置信息准备各项调用命令、参数和需要的文件,完成后按照设定的命令格式进行安全编译器的调用.
1.3 带有安全检测功能编译结果的显示
传统的嵌入式C语言编辑器在调用编译器进行代码的编译后,往往采用将编译器的结果以文本文字的形式显示输出的方法.这种方法的优点是处理方便,编辑器只负责显示文本,大部分工作都留给了编译器完成,但其缺点是所有信息一起显示,不能很好地适应更高级别的安全编译需求[2].
安全编译器编译后产生的编译信息中,除了包含传统业务功能的语法错误信息外,还有安全编译算法自身的语法错误信息等额外信息.这是因为安全检测的相关语句也是由程序员输入进去的,只要是人为输入的语句就有存在语法错误的可能.所以,编辑器要想更好地支持带有安全检测的编译过程,就要实现传统代码的编译信息与安全检测代码编译信息的分离,这样就能使用户更清晰地判断错误出现在哪个环节,进而才能有针对性地采取措施进行调试.
设计中采用了2个文本信息显示窗口,在编译完成后,编辑器便从编译器处分别接收传统编译信息文本和安全检测编译信息文本,并将他们分别显示到不同的窗口中[3].
2 支持多种安全编译算法的语法加亮模块
传统的嵌入式C语言编辑器在用户输入过程中需要进行语法加亮,由于其语法环境的确定性,语法中的关键字是固定的关键字集合,因此进行语法加亮时可以采用将关键字列表存储在编辑器或编译器程序中的方法[4].
由于要支持带有安全编译算法的安全嵌入式C语言语句的编辑,因此该设计在安全性能方面与传统的嵌入式C语言语法表现出很大的差异.以带有控制流检测技术的嵌入式C语言为例,它是在传统嵌入式C语言的基础上扩充了一个控制流检测相关的安全语法子集.程序员采用这种安全的嵌入式C语言进行程序开发时,可在编写完具体业务代码之后,用安全子集的语法在用户代码的各个有调转调用关系的模块之间插入控制流检测语句来进行控制流加固.但是,如果使用的嵌入式C语言编辑器不支持扩充的安全语法子集,就无法对程序员输入的控制流检测语句进行语法加亮,这样就可能对用户的代码输入及调试造成影响.
通过对几种不同安全编译算法的研究,该设计提出了配置一组安全编译算法扩展语法子集描述文件和构造一个安全编辑算法支持适配器的方法,其实现原理如图3所示.
图3 安全编译算法描述文件和安全支持适配器的关系Fig.3 The relationship between the description of security compiled algorithm to the files and security support adapter
用户在确定采用某一种安全编译算法后,首先查看系统中有无本安全算法的语法支持描述文件,若不存在,则需要编写该算法的安全语法扩充文件;然后,利用编辑器编写程序的业务功能函数代码,由于这个过程中输入的是传统嵌入式C语言语法,所以编辑器可以通过传统的方式对用户的输入进行语法加亮及语法指导;最后,对编写的程序进行安全加固,这时由于适配器发现了用户输入的语法与系统中某个安全算法的扩充语法规范相符,所以仍然可以对输入进行语法加亮和指导.这样就完成了编辑器语法加亮和语法指导对指定安全嵌入式C语言的支持.
3 语法安全子集支持模块
在嵌入式软件的开发过程中有一个很容易被忽视的问题,也往往会给系统带来较大的安全隐患.有组织从嵌入式领域的多年应用中总结出一系列针对嵌入式C语言的编程规范,如MISRA-C(The Motor Industry Software Reliability Association,汽车工业软件可靠性联会)编程规范.这些规范中描述的都是符合C语言语法但可能会引起代码不安全或不稳定的语句或表达式,如++++i等.实践表明,嵌入式开发中遵循这些规范能有效消除安全隐患.目前,这些规范的贯彻主要是通过程序员的自我约束实现的.
设计中将这些规范划分安全等级,在编辑器中保存一个有安全隐患的语法子集,使其成为编辑器的一个可选功能.用户使用编辑器进行代码输入时,系统在确认一个词素之后,就到安全隐患语法子集中查找,若发现可疑则提示用户该处有隐患.用户可以通过系统设置,来自定义安全子集提示级别与提示方式.
4 编辑器在R80515集成开发环境中的总体实现
本高可靠嵌入式C语言编辑器现已应用到了高可靠R80515集成开发环境中.编辑器的各项功能由项目管理器进行统一管理,项目管理器提供项目管理各方面的服务,为编辑器提供统一的数据,是整个集成开发平台的核心[5].
整个开发环境运行主程序进程,由MFC基础类库中的CwinApp支持;由MFC类库中的CMDIFrameWnd和CMDIChildWnd搭建基本的窗口界面;由文档/视图机制构建基本的代码编辑和显示功能;利用CDocTemplate类进行基本的项目文档管理;通过使用CMultiDocTemplate类,来实现文档、视图和各子窗口这3个大类的管理.项目管理系统程序如图4所示.
图4 项目管理系统程序结构图Fig.4 Diagram for the structure of project management system procedures
当用户在集成开发环境中执行新建项目文件操作时,就在主进程中创建一个由m_pCurrentProjec指向的项目文档,而在该项目文档中维护了一张用于添加到项目中的源文件列表,具体的内部实现框图如图5所示.图5显示了文档管理实现的过程.当执行新建项目操作时,程序中新建一个CAppProject对象,该对象中包含了一个用于维护源文件的文件信息列表,文件信息列表中罗列了包含在项目中的源文件信息对象,其中记录了源文件的各种操作所需的信息.当用户执行将一个新建或者打开的源文件加入到项目文档中时,项目就为该源文件新建一个信息对象,并保存源文件的信息,最后加入到文件信息列表中;而当用户执行关闭项目或者保存项目时,项目信息及其包含的各种源文件信息都将保存到硬盘上;用户也可以随意地删除、添加和编译项目中的源文件,而所有这些操作都由CAppProject中编制的代码来完成.
图5 项目管理的内部实现Fig.5 Interior implement of project management
5 结束语
通过对编辑器高可靠性的研究,文章设计了一个安全编译支持模块、一个语法安全子集支持模块和一个支持多种安全编译算法的语法加亮模块.安全编译支持模块实现了编辑器对安全编译扩展语法的识别、对安全编译器控制流检测层编译信息的显示、对语法安全子集的支持;语法安全子集支持模块可以在程序员输入含有安全隐患的代码时,按照安全等级给出提示,为程序员提供安全方面的保障;语法加亮模块通过采用配置一组安全编译算法扩展语法子集描述文件和构造一个安全编辑算法支持适配器的方法,实现了对安全编译过程中特殊语法的加亮显示功能.
尽管该文对编辑器设计中的关键技术与实现进行了探讨与研究,但是还有较多的不足之处,如在继续增加各种集成开发工具、对集成开发环境的商业实现等方面还有待进一步研究.
[1] 李林功,高金辉,谷余宏.IDE与嵌入式系统设计[J].河南师范大学学报:自然科学版,2006,31(2):32-35.
[2] 黄剑华,唐降龙,刘家锋,等.一种基于Homogeneity的文本检测新方法[J].智能系统学报,2007,19(3):69-73.
[3] 陈众等.VC环境下小型工业监控软件的开发[J].计算机自动测量与控制,2006,8(5):112-115.
[4] 郭兵,熊光泽,陈宇.嵌入式应用软件集成开发环境的比较与分析[J].计算机应用,2007,12(3):267-269.
[5] 李林功,李继凯,谷金宏.嵌入式集成开发环境的构成汇[J].计算机工程,2008,27(5):67-70.
[6] 康一梅,张永革,李志军.嵌入式软件测试[M].北京:机械工业出版社,2008:114-217.
[7] 张青松,李兴华.计算机图形生成算法的可视化研究[J].安徽大学学报:自然科学版,2007,31(3):27-29.
[8] Aktas A Z.Structured analysis and design of information systems[M].Upper Saddle River, NJ: Prentice Hall,2007:50-59.
TheDesignofHighlyReliableEmbeddedCLanguageEditorSupportingSecurityCompilationAlgorithm
HAN Xue
(Department of Computer Science and Information Engineering, Heihe University, Heihe 164300, China)
The software designed by high reliability editors will provide more safety guarantee to the system from its beginning.Based on the example of the editor which supports the control flow detection algorithm, this article designed three high reliable modules with special functions, realized the identification to security compiler expansion grammar, showed compiling information of the control flow testing level of the security compiler and supported grammar security subset, achieved the grammar highlights of a variety of highly reliable security algorithm by using the dynamic profile approach as well.
embedded; security compilation; editor
2010-12-19
韩 雪(1977—),女,黑龙江大庆人,讲师,硕士,主要从事嵌入式系统、计算机基础理论研究.E-mail:hanhuaer@yeah.net
10.3969/j.issn.1674-232X.2011.04.017
TP319
A
1674-232X(2011)04-0370-05