一种基于Makefile自动编译技术实现的软件源文件静态分析方法_2

文档序号:9375328阅读:来源:国知局
linux-gcc ;替换后的编译命令行将作为对编译源文件进行静态分析的入口。
[0031]步骤2.5、调用systemO函数执行步骤2.4中的替换后的编译命令行;system()函数执行后,将执行权限交给pgr5_ppc-l inux-gcc。
[0032]步骤3、执行PGRelief静态分析命令行
[0033]pgr5_ppc_linux-gcc获得执行权限后,开始执行编译源文件的静态分析工作。
[0034]步骤3.1、获取系统宏定义。
[0035]编译器ppc-linux-gcc获取系统宏定义的方法是
[0036]“ppc-linux-gcc-dM - E emtpy.C”,
[0037]其中empty, c是个空文件;执行该命令后,将获取的系统宏定义保存到静态分析选项中。
[0038]步骤3.2、获取系统头文件路径。
[0039]编译器ppc-linux-gcc获取系统头文件路径的方法是“ppc_linux-gcc - vempty, c”,其中empty, c是个空文件;执行该命令后,将获取的系统头文件路径保存到静态分析选项中。
[0040]步骤3.3、解析编译选项,过滤掉静态分析不支持的,不必要的选项,将编译器特定的编译选项等效地转换成PGRelief可识别的选项;将解析后的编译选项加入到静态分析选项中;此过程的处理依赖于现有的PGRelief工具。
[0041]步骤3.4、pgr5_ppc-linux-gcc将静态分析命令设置为pgr5,并调用自身的exec O函数执行静态分析;静态分析完成后,将解析结果输出到log文件中,并将执行权限交还给Make工具。
[0042]步骤4、执行编译命令行。
[0043]Make工具重新获得执行权限后,从job_next_commandO函数继续执行,执行当前的编译命令行。
[0044]步骤5、当该项编译任务完成后,Make工具继续解析Makefile文件。
[0045]当Make工具获取到下一条编译命令行时,则跳转到步骤I继续执行;否则,跳转到步骤6继续执行。
[0046]步骤6、PGRelief静态分析结果分析。
[0047]当Makefile中所有的编译命令运行完毕后,对应的源文件的静态分析工作也已经完成,接下来pgr_make.rb会对静态分析结果进行处理,以方便用户查看。
[0048]步骤6.1、将静态分析结果文件格式化成CSV格式。
[0049]步骤6.2、根据解析结果,将存在问题的解析项插入到对应源文件的对应位置。
[0050]步骤6.3、输出静态分析过程中存在问题的源文件列表。
【主权项】
1.一种基于Makefile自动编译技术实现的软件源文件静态分析方法,其特征在于,包括以下步骤: 步骤一:调用Make工具对自动化编译所用的Makef iIe工程文件内容进行解析,获得待编译的源文件的编译命令行,截获该编译命令行,并暂停make的执行权; 步骤二:将截获的编译命令行格式化,将编译命令行分离成编译命令和编译选项;通过编译命令进行编译器匹配;能匹配到编译器的,解析编译命令行,获取静态分析命令行;不能匹配到编译器的,跳转步骤四; 步骤三:将执行权交给交给获取到的静态分析命令行,由静态分析命令行执行编译源文件的静态分析工作;静态分析完成后,将解析结果输出到log文件中,并将执行权限交还给 Make ; 步骤四:Make工具重新获得执行权限后,继续执行当前的编译命令行; 步骤五:当Make工具获取到下一条编译命令行时,则跳转到步骤一;否则,跳转到步骤六; 步骤六:将静态分析结果文件格式化成CSV格式;根据解析结果,将存在问题的解析项插入到对应源文件的对应位置;输出静态分析过程中存在问题的源文件列表。2.根据权利要求1所述的一种基于Makefile自动编译技术实现的软件源文件静态分析方法,其特征在于,所述步骤一还包括以下步骤: 步骤1.1)在Make工具的job.c中的job_next_command()函数中,截取Make工具已解析的Makefile中的编译命令行; 步骤1.2)调用systemO函数,执行compilerControl.rb,调用形式为system( “compilerControl.rb编译命令行”);调用systemO函数后,Make工具将执行权限交给 compilerControl.rb。3.根据权利要求1或2所述的一种基于Makefile自动编译技术实现的软件源文件静态分析方法,其特征在于,所述步骤二还包括以下步骤: 步骤2.DcompilerControl.rb获得执行权后,将截获的编译命令行进行格式化; 步骤2.2)从格式化后的编译命令行中提取编译命令,进行编译器匹配;若匹配到相应的编译器,则继续向下执行;若未匹配,则跳转到步骤四。 步骤2.3):根据匹配到的编译命令选择对应的pgr_fake脚本文件,该脚本文件的格式为 pgr5_xxx ; 步骤2.4):将编译命令行中的编译命令替换成对应的pgr_fake脚本;替换前后的编译命令行如下:替换前:“编译命令编译选项编译源文件”;替换后:“pgr5_xxx编译选项编译源文件”; 步骤2.5):调用systemO函数执行步骤2.4中的替换后的编译命令行;该函数执行后,执行权交给pgr5_xxx执行。4.根据权利要求1或2所述的一种基于Makefile自动编译技术实现的软件源文件静态分析方法,其特征在于,所述步骤三还包括以下步骤: 步骤3.1):获取系统宏定义;根据每种编译器获取系统宏定义的方式,获取相应的系统宏定义,并将其加入到静态分析选项中; 步骤3.2):获取系统头文件路径;根据每种编译器获取系统头文件路径的方式,获取系统头文件路径,并将其加入到静态分析选项中 步骤3.3):解析编译选项,过滤掉静态分析不支持的,不必要的选项,将编译器特定的编译选项等效地转换成静态分析测试系统可识别的选项,将解析后的编译选项加入到静态分析选项中; 步骤3.4):将静态分析命令设定为pgr5,并与已获得的静态分析选项进行拼接,创建一个子进程执行拼接后的静态分析命令行;当前源文件的静态分析工作结束后,解析的log输出到指定的文件,并将执行权交还make工具。5.根据权利要求1或2所述的一种基于Makefile自动编译技术实现的软件源文件静态分析方法,其特征在于,所述步骤六还包括以下步骤: 步骤6.1):将静态分析结果文件格式化成CSV格式; 步骤6.2):拷贝PGRelief中自带的MessageView工具的模板PGR_RESULT.pg2到静态分析结果目录; 步骤6.3):在WINDOWS平台下,借助MessageView工具对静态分析结果进行分析。
【专利摘要】本发明公开了一种利用Makefile的自动编译技术来实现整个软件中大量源文件的静态分析自动化的方法,所述处理方法包括:借助make命令对自动化编译所用的Makefile工程文件进行解析;生成每个源文件的编译命令;对生成的命令信息进行解析,生成当前文件所对应的静态分析命令;对当前文件进行静态分析,并保存解析结果;返回make命令处理,执行编译命令编译当前源文件。本发明支持WINDOWS和LINUX两个平台,能够对基于多种编译器的工程源文件进行自动化的静态分析,无需用户对静态编译工具进行额外的学习,只需执行一条简单的解析命令(LINUX平台)或鼠标一键操作(WINDOWS平台),即可完成代码的静态分析工作,大大提高了工作效率和静态分析工具的使用性。
【IPC分类】G06F9/45
【公开号】CN105094939
【申请号】CN201510418857
【发明人】蔡志旻, 沈峰, 朱敏杰, 姚幸涛
【申请人】南京富士通南大软件技术有限公司
【公开日】2015年11月25日
【申请日】2015年7月16日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1