致力于打造一个专业的中小学教育学习网站

浅谈基于GCC的C++静态分析器的开发应用

时间:2021-07-13 13:19:24 admin

  浅谈基于GCC的C++静态分析器的开发应用

  摘要:目前,最主流的开发语言之一就是C++,越来越多的工具都使用C++语言来开发了。因为C++具有高效等特性,所以得到了很广泛的运用。但是不可避免的,在开发软件程序方面,它也存在着一些缺陷。因此,基于开源编译器GCC的C++静态分析器就被开发出来了,可以审查代码,发现缺陷,保证代码的安全和可靠。本文通过对C++静态分析器的C++的语言的缺陷、检查规则以及编译器的内容进行阐述,综合讲解了其开发与应用。

浅谈基于GCC的C++静态分析器的开发应用

  关键词:GCC C++静态分析器开发应用

  中图分类号:TP274.1文献标识码:A文章编号:1007-9599 (2012) 07-0000-02

  C++是一种设计语言,它可以实现面向对象的程序设计,如今,它所应用的领域越来越广泛了,又由于它的复杂性,运用它所开发出来的软件具有一些安全隐患,这就要求对软件有一个测试系统,C++静态分析器在其中起到核心的分析作用并且选择GCC这一成功的开源软件作为其平台。

  一、C++静态分析器开发的背景

  (一)C++语言的应用领域

  C++是当今最为广泛使用的程序设计语言之一,在商业软件开发中广为应用,在其他部分行业中也运用广泛。

  游戏:C++的效率的原因是很重要的。

  科学计算:科学计算的领域内,使用最多的语言之一即为FORTRAN。但是,最近这些年,在FORTRAN这一领域,颇多的应用了先进的数值计算库以及泛型编程的优势。网络软件:网络通信库在C++方面是很成熟的,跨平台,重量级,在这其中是最具有代表性的,这个库是C++语言当中,最重要的成果,在许多重要的企业、部门甚至是军方都有应用。 操作的系统:在这个领域之内,最主要使用的编程语言就是C语言。但是,凭借着它的兼容性,所面对的对象开始在该领域崭露头角。 设备驱动程序:同样是因为这个语言的高效率。 同时,C++语言还被运用到移动(手持)设备,嵌入式系统,教育与科研,以及航天领域等等。

  (二)C++语言的缺陷

  优秀的,面向对象程序所设计的就是语言C++语言,它的由来是C语言基础上所发展出来的。因为C++的独特性,它在很多的领域得到了很广泛的运用。

  C++语言过于复杂化在业界已经成为了共识:一个指针就使C++比关键字数目相同的语言复杂许多,导入模板后各种应用精巧的应用使这门语言进一步复杂化了。C++标准库的苍白:C++标准库里甚至不覆盖正则表达式和XML,显得很单一,并且C++语言已经无法简化了。

  另外:简单的说,还有以下几点缺陷:

  指针,违例的数组:析取空的指针,将数组维度之外的数组元素访问出来,将缓冲区中小的字符复制或是串过。

  变量没有初始化:在对变量做初始化之前,用它删除指针之后还选取这个指针。

  更加多见的是,在不需要使用delete的时候一旦使用了delete;对象中的构造函数,就会将虚函数调用了,没有提供构造函数。还存在整数大小的错误以及逻辑错误。

  三、开源编译器GCC的平台

  (一)编译器的简单介绍

  一九八五年,杰出的美国程序设计师理查德·斯托曼,它发起并且也创建了世界上第一个非营利性的,计算机的软件组织,也就是软件基金会。创新的技术上,为公众共享软件产品的开发,是这个组织的最高宗旨。由此推进了‘GNU计划’,它的其中一个产品就是GCC编译器。

  GCC是一套由 GNU 开发的编程语言编译器,它的原名为 GNU C 语言编译器。它是一套自由软件,是以 GPL和LGPL许可证所发行的,也是自由的类的标准编译器,也就是Unix和苹果计算机MacOSX操作系统。GCC通常被人们认作为是,跨平台编译器的一个标准。GCC原本也只是对C语言有处理的能力。随着GCC的扩展的速度的加快,就变成了可处理的C++,在这之后也也就可以处理Fortran,Pascal,Objective-C、Java, 和Ada等的其他语言。

  GCC的有两个重要的设计目标,其一是在不同硬件平台建造支持的编译器的时候,可以最大程度用代码复制使用,这就是它的无关性的硬件。其二是形成可执行代码的高质量,这也是代码的优化性。基于这些,产生了中间语言RTL。

  (二)工作流程

  从原代码到直接能被计算机或者是虚拟机所执行的目标代码的翻译过程即为编译。

  由包含的入口点的名字以及地址和外部的调用的机器代码,它们所组成的目标文件即为典型的编译器输出。同组的目标文件,不一定需要是在同一编译器中所产生的,但是,使用的编译器所采用的输出格式必须是要同一样的,这样链接在一起就可以合并,并且生成出可执行的程序。同时也是可以由用户直接执行的。

  主要负责解析输入的源代码是编译器的前端,它是由语法分析器以及语意分析器来一起工作的。负责找出源代码中的单词是语法分析器,将分散的单词,按照预先定义好的语法,组装成有意义的语句与函数等等是语法分析器的主要责任。比如,b=c+a,前端语法分析器看到的是c,=,a,+,b,语意分析器要按照一定的语法,将他们先组装成表达式,a + b,再组装成b= c + a的语句。前端还是要检查语义的,比如,检测看看参与运算的变量是不是同一个类型的,将错误做简单的处理。最后的结果,通常是一个比较抽象的语法,所以,进一步的优化可以在这个基础上做出处理。

  分析是编译器后端所主要负责的,将中间代码来优化以及生成机器代码,生成在目标机器上可运行的代码。

  由此可见,开源编译器GCC如今就是可以作为一个成功的典范,它是一个很好的平台,为C++静态分析器的开发与利用提供了很好的保证,使其更加的合理与完整。

  (三)GCC中的TREE结构

  在编译程序中符号表是用来存放语言程序中出现的有关标识符的属性信息,这些信息反映了标识符的语义特征属性。符号表能够收集符号属性,是上下文合法语义检查的依据,更加是目标代码生成阶段地址分配的依据。

  符号表的组织有很多的形式,GCC中采用的是TREE结构,它是GCC的核心数据结构。一颗TREE是一个指针的类型,同时指向不同的类型。通过查找符号表,确认了软件开发的可行性。

  静态规则检查

  编译器的静态规则检查,包括了:词法分析、语法分析、语义分析等。

  1.分析词法:编译的过程的第一个阶段是词法的分析,从左到右一个字符一个字符的读入源程序是它的任务之一,将源程序的字符扫描以及分解构成,这样才可以识别出单词。单词有集体的含义,如;标识符,保留字,算符等等。

  程序语言中的一系列的限定规则是静态语言,它是确定有哪些法的程序是合适的。词法分析可以是独立的一遍,将它分离考虑的原因有三方面,一是使编译程序结构简洁,有条理;二是大大提高编译的效率;三是增强编译程序的可移植性。

  2.编译程序的核心部分就是语法的分析,在词法分析的基础之上,将单词分解成为各种的短语,例如:程序,语法等。

  自顶向下分析以及自底向上分析的语法分析是最常用的方法,然而,确定分析,不确定分析是自顶向下的分析,自底向上的分析又包括了算符的优先分析以及LR分析。LR分析法能够根据符号串以及向右的顺序查看的,并且确定唯一的分析器,动作是移进的方式归纳的,能惟一的确定句柄。

  3.审查源程序的定义有没有错误,并且生成的阶段所收集的信息即为语义分析。

  4.生成的中间代码:进行上述工作后,又得变成了内部的一种表现的形式,也就是中间语言或者是中间的代码。这个系统的记号结构简单、含义明确,可以设计成很多样式。它也得遵循两个原则:它是容易生成的;容易将它翻译成目标代码。

  这就是静态规则检查的部分,他是程序化的,有条理的,为软件开发的安全性提供了很好的保证,让C++语言的应用更加的完美与合理。

  基于GCC的C++静态分析器的应用的总结与展望

  C++语言的编程在如今这个时代,在航天的领域也得到了使用,而航天领域是一个对国家对人民尤为重要的领域,这就要求了在航天领域编写的软件具有极其高的安全性和可靠性。所以说,C++静态分析器在其中就起到了核心的作用,审查源代码,在其中发现不符合规则的一些代码,为软件的开发与实际应用把关,为程序员在逐步检查、修改代码的过程中提供一些方便与依据,使得软件具有很高的严密性,这就是在软件的可靠性和安全性上起到的作用。同时,它又是以开源工具GCC作为基础开发的代码审查软件,由于了GCC的广泛使用,以及GCC项目的成熟,保证工具的安全可行。

  但是不可避免的,所有的分析工具都面临着一些问题,其一,这些规则的覆盖度是否能很好的发现程序中的所有错误;其二,存在着误报率,这就需要它被控制在一个合理的范围以内,保证工具的可靠性。虽然有一些不足,可是C++静态分析器仍然是一个很好的测试工具。

  四、结束语

  基于GCC的C++静态分析器的开发与应用是随着时代的发展,随着人们对C++语言编程的深刻理解,以及在对GCC这一开源编译器的充分认知的基础之上开发出来的。它对程序有一个全面的、细致的检测,审查出已经编写好的程序有哪些地方存在着漏洞,并及时让程序员进行修改。这也为程序员的编写与审查提供了质量、速度与效率的保证,这种基于GCC的C++静态分析器具有很广泛的市场前景。

  参考文献:

  [1]Stanley B Lippman,Josee Lajoie《C++primer第三版》 中国电力出版社

  [2]张素琴,吕映芝.蒋维杜等《编译原理》(第2版)清华大学出版社

  结尾:非常感谢大家阅读《浅谈基于GCC的C++静态分析器的开发应用》,更多精彩内容等着大家,欢迎持续关注学习大全网「Xuexidaquan.Com」,一起成长!

浅谈基于GCC的C++静态分析器的开发应用相关文章:

数据仓库的运行监视及性能优化研究

软件质量保证方法研究

计算机网络常见故障及应对措施研究

计算机网络信息安全与病毒防治

软件外包业务发展现状及策略研究

分析如何利用计算机技术防范金融风险

【科技论文】推荐文章

【科技论文】图文精华