当前位置: 首页 > 专利查询>肖银皓专利>正文

一种应用程序堆栈静态分析方法及系统技术方案

技术编号:21772347 阅读:38 留言:0更新日期:2019-08-03 21:44
本发明专利技术公开了一种应用程序堆栈静态分析方法及系统,根据软件配置文件生成软件包之间的信息流向图,即数据流图,并通过额外信息解析每个接口的函数指针对应的下级函数生成函数调用有向图,根据检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的精确最大栈使用量,大大增加静态栈分析对于嵌入式系统应用程序软件系统的适用能力,能够在函数指针广泛存在的情况下对函数指针进行解析从而完成整个系统的静态分析。这大大提高了线程栈估计的精确性,增加了嵌入式系统的可靠性和安全性。

A Static Analysis Method and System for Application Stack

【技术实现步骤摘要】
一种应用程序堆栈静态分析方法及系统
本公开涉及嵌入式系统
和操作系统
,具体涉及一种应用程序堆栈静态分析方法及系统。
技术介绍
随着工业4.0和物联网的兴起,嵌入式软件的安全性变得越来越重要。尤其在嵌入式程序中,防止堆栈溢出是安全的重中之重。一旦发生堆栈溢出,程序轻则出错停止执行,重则发生错误动作。然而,嵌入式系统本身的存储器又相当有限,不可能在不知道堆栈大小的情况下给应用程序盲目预留比其需求更多的堆栈大小,因为这会导致存储空间的浪费。对程序进行动态分析的方法在嵌入式程序中也是不合适的,因为运行时分析往往不能得到栈的严格的使用量,因为输入的测试用例不可能覆盖到系统的每一种情况,因此很有可能不能正确探测栈使用量的最大值,现有的应用程序栈分析方法可以分为两类,一类是静态分析,一类是动态分析。静态分析是指对源代码进行分析,构建函数调用关系树,并且从中找到函数调用使用栈最多的那个分支,由其调用深度和局部变量使用情况决定栈的大小。动态分析是指编译并运行代码,并且在运行时动态探测堆栈的使用量。在程序运行一段时间后,将几次测量得到的最大值作为堆栈的使用量报告给用户。现有的程序堆栈处置方法无法正确应对IoT环境下复杂嵌入式系统的堆栈分配:(1)现有的静态分析方法无法分析函数指针。由于函数指针的值只有在运行时才会被动态决定,因此不可能知道函数指针之后各个调用层的信息。这使得在含有函数指针的软件包上做静态堆栈分析成为不可能;(2)现有的动态分析方法只能使用有限的测试用例,无法保证返回的堆栈最大值是当前程序的真正最大值;(3)由于现有的微控制器等深度嵌入式应用日渐复杂,因此为每一个程序预留大量栈区以确保不会发生栈溢出的方法不再适用;(4)现有的静态分析方法无法发现应用程序中潜在出现的、由函数指针导致的递归调用,也即在一个函数内调用的子函数的函数指针指向了该函数的调用者或更高级别的调用者,我们需要一种合适的静态分析方法处理这个问题。
技术实现思路
为了解决上述问题,本公开提供一种应用程序堆栈静态分析方法及系统,根据软件配置文件生成软件包之间的信息流向图,即数据流图,并通过额外信息解析每个接口的函数指针对应的下级函数生成函数调用有向图,根据检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的精确最大栈使用量。为了实现上述目的,根据本公开的一方面,提供一种应用程序堆栈静态分析方法,所述方法包括以下步骤:步骤1,应用程序堆栈静态分析系统调用软件包配置读取模块;步骤2,软件包配置读取模块读取软件配置文件生成数据流图;步骤3,根据数据流图生成接口对应图;步骤4,检查接口对应图是否有环,若有环则退出,若没有环则转到步骤5;步骤5,将数据流图和接口对应图传递给函数指针解析模块;步骤6,根据接口对应图解析每个接口的函数指针对应的下级函数;步骤7,将每个接口的函数指针对应的下级函数生成函数调用有向图;步骤8,检查函数调用有向图是否有环,若有环则退出,若没有环则转到步骤9;步骤9,静态分析模块检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量。进一步地,在步骤1中,所述应用程序堆栈静态分析系统包括:软件包配置读取模块、函数指针解析模块和静态分析模块;其中,软件包配置读取模块负责读取整个软件系统的配置信息(即软件配置文件),这些配置信息包含了软件模块之间的信息流向。软件包配置模块将软件包之间的信息流向和接口对应关系整理成一张有向图,并确认其中无环;如果有环,那么提醒用户软件包中可能有递归调用,因此该配置不能用于嵌入式系统,软件包包括但不限于分立的软件包和用于完成某种整体功能的分立软件包的有机组合;软件系统包括一个或多个软件包(系统软件包、支撑软件包和应用软件包),由一个或多个软件包构成,是计算机系统中由软件(软件包)组成的部分。函数指针解析模块负责读取软件包配置模块生成的信息流向有向图和接口对应关系,并且解析各个函数指针到其对应的函数。由于一旦接口之间的对应关系被确定了,软件包的函数指针对应的函数也就确定了,因此该模块可以分析出每个函数指针可能对应的底层函数。接下来,该模块整理出整个软件系统的函数调用有向图以及每个函数的栈使用量,并将这些信息打包成文件交给静态分析模块;其中,静态分析模块根据上述信息,从每个线程的入口点遍历整个函数调用有向图,首先确定该调用图中不存在环(若存在环则报错退出),并寻找函数调用有向图中最长的路径,将其长度作为栈使用量报告给用户,以此得出每个线程的精确最大栈使用量。进一步地,在步骤2中,所述数据流图是根据软件系统中的软件配置文件生成的软件包之间的信息流向,软件配置文件包括但不限于软件包描述、软件包之间的调用关系、软件包之间的信息流向,通过软件配置文件可以快速的读取到软件包之间的信息、接口及其流向。进一步地,在步骤3中,所述接口对应图为根据数据流图将软件系统中的软件包作为节点,软件包之间的信息流向的路径作为边构建的有向图,软件包之间的信息流向的路径为软件包之间通过接口调用的函数指针传递数据信息。进一步地,在步骤4中,检查接口对应图是否有环的方法为,根据深度优先遍历有向图的方法、广度优先遍历有向图的方法或者其它任何遍历方法遍历接口对应图并判断是否有环,如果存在环则软件包中可能有递归调用,因此该配置不能用于嵌入式系统。进一步地,在步骤6中,根据接口对应图解析每个接口的函数指针对应的下级函数的方法为,根据深度优先遍历或者广度优先遍历进行遍历接口对应图,根据软件包的信息流向的路径通过的接口调用的函数指针,读取(解析)出每个接口的函数指针对应的下级函数,即根据路径读取每个函数指针对应的所有底层函数,下级函数为每个接口的函数指针指向的函数。进一步地,在步骤7中,所述函数调用有向图中的每个顶点为一个函数,顶点的值为函数的堆栈使用量,根据上级函数指针调用的下级接口解析出所有的函数指针对应的实体函数,并生成函数调用有向图进一步地,在步骤8中,检查函数调用有向图是否有环的方法为,根据深度优先遍历有向图的方法、广度优先遍历有向图的方法或者其它任何遍历方法遍历函数调用有向图并判断是否有环。进一步地,在步骤9中,检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量的方法为:从每个线程的入口点遍历整个函数调用有向图,并寻找函数调用有向图中最长的路径,将路径中各个顶点的值(即函数的堆栈使用量)之和作为最大栈使用量,以此得出每个线程的精确最大栈使用量。本专利技术还提供了一种应用程序堆栈静态分析系统,所述系统包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在应用程序堆栈静态分析系统的软件包配置读取模块、函数指针解析模块和静态分析模块的各自单元中:其中,软件包配置读取模块,包括以下单元:数据流图生成单元,用于读取软件配置文件生成数据流图;接口对应图生成单元,用于根据数据流图生成接口对应图;接口环检查单元,用于检查接口对应图是否有环,若有环则退出,若没有环则将数据流图和接口对应图传输给函数指针解析模块;其中,函数指针解析模块,包括以下单元:数据接口图接收单元,用于接收数据流图和接口对应图;函数解析单元,用于根据接口对应图解析每本文档来自技高网
...

【技术保护点】
1.一种应用程序堆栈静态分析方法,其特征在于,所述方法包括以下步骤:步骤1,应用程序堆栈静态分析系统调用软件包配置读取模块;步骤2,软件包配置读取模块读取软件配置文件生成数据流图;步骤3,根据数据流图生成接口对应图;步骤4,检查接口对应图是否有环,若有环则退出,若没有环则转到步骤5;步骤5,将数据流图和接口对应图传递给函数指针解析模块;步骤6,根据接口对应图解析每个接口的函数指针对应的下级函数;步骤7,将每个接口的函数指针对应的下级函数生成函数调用有向图;步骤8,检查函数调用有向图是否有环,若有环则退出,若没有环则转到步骤9;步骤9,静态分析模块检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量。

【技术特征摘要】
1.一种应用程序堆栈静态分析方法,其特征在于,所述方法包括以下步骤:步骤1,应用程序堆栈静态分析系统调用软件包配置读取模块;步骤2,软件包配置读取模块读取软件配置文件生成数据流图;步骤3,根据数据流图生成接口对应图;步骤4,检查接口对应图是否有环,若有环则退出,若没有环则转到步骤5;步骤5,将数据流图和接口对应图传递给函数指针解析模块;步骤6,根据接口对应图解析每个接口的函数指针对应的下级函数;步骤7,将每个接口的函数指针对应的下级函数生成函数调用有向图;步骤8,检查函数调用有向图是否有环,若有环则退出,若没有环则转到步骤9;步骤9,静态分析模块检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量。2.根据权利要求1所述的一种应用程序堆栈静态分析方法,其特征在于,在步骤1中,所述应用程序堆栈静态分析系统包括:软件包配置读取模块、函数指针解析模块和静态分析模块。3.根据权利要求1所述的一种应用程序堆栈静态分析方法,其特征在于,在步骤2中,所述数据流图是根据软件系统中的软件配置文件生成的软件包之间的信息流向,软件配置文件包括但不限于软件包描述、软件包之间的调用关系、软件包之间的信息流向。4.根据权利要求1所述的一种应用程序堆栈静态分析方法,其特征在于,在步骤3中,所述接口对应图为根据数据流图将软件系统中的软件包作为节点,软件包之间的信息流向的路径作为边构建的有向图,软件包之间的信息流向的路径为软件包之间通过接口调用的函数指针传递数据信息。5.根据权利要求4所述的一种应用程序堆栈静态分析方法,其特征在于,在步骤6中,根据接口对应图解析每个接口的函数指针对应的下级函数的方法为,根据深度优先遍历或者广度优先遍历进行遍历接口对应图,根据软件包的信息流向的路径通过的接口调用的函数指针,解析出每个接口的函数指针对应的下级函数。6...

【专利技术属性】
技术研发人员:肖银皓
申请(专利权)人:肖银皓
类型:发明
国别省市:广东,44

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

1