CN110084042A - 一种应用程序堆栈静态分析方法及系统 - Google Patents

一种应用程序堆栈静态分析方法及系统 Download PDF

Info

Publication number
CN110084042A
CN110084042A CN201910391220.4A CN201910391220A CN110084042A CN 110084042 A CN110084042 A CN 110084042A CN 201910391220 A CN201910391220 A CN 201910391220A CN 110084042 A CN110084042 A CN 110084042A
Authority
CN
China
Prior art keywords
function
interface
static analysis
digraph
software package
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.)
Granted
Application number
CN201910391220.4A
Other languages
English (en)
Other versions
CN110084042B (zh
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.)
Foshan Fengfeng Technology Co.,Ltd.
Original Assignee
肖银皓
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 肖银皓 filed Critical 肖银皓
Priority to CN201910391220.4A priority Critical patent/CN110084042B/zh
Publication of CN110084042A publication Critical patent/CN110084042A/zh
Application granted granted Critical
Publication of CN110084042B publication Critical patent/CN110084042B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • 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/427Parsing
    • 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
    • G06F8/434Pointers; Aliasing

Abstract

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

Description

一种应用程序堆栈静态分析方法及系统
技术领域
本公开涉及嵌入式系统技术领域和操作系统技术领域,具体涉及一种应用程序堆栈静态分析方法及系统。
背景技术
随着工业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所示为一种应用程序堆栈静态分析方法的流程图;
图2所示为一种应用程序堆栈静态分析系统图。
具体实施方式
以下将结合实施例和附图对本公开的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本公开的目的、方案和效果。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图1所示为根据本公开的一种应用程序堆栈静态分析方法的流程图,下面结合图1来阐述根据本公开的实施方式的一种应用程序堆栈静态分析方法。
本公开提出一种应用程序堆栈静态分析方法,具体包括以下步骤:
步骤1,应用程序堆栈静态分析系统调用软件包配置读取模块;
步骤2,软件包配置读取模块读取软件配置文件生成数据流图;
步骤3,根据数据流图生成接口对应图;
步骤4,检查接口对应图是否有环,若有环则退出,若没有环则转到步骤5;
步骤5,将数据流图和接口对应图传递给函数指针解析模块;
步骤6,根据接口对应图解析每个接口的函数指针对应的下级函数;
步骤7,将每个接口的函数指针对应的下级函数生成函数调用有向图;
步骤8,检查函数调用有向图是否有环,若有环则退出,若没有环则转到步骤9;
步骤9,静态分析模块检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量。
进一步地,在步骤1中,所述应用程序堆栈静态分析系统包括:软件包配置读取模块、函数指针解析模块和静态分析模块;
其中,软件包配置读取模块负责读取整个软件系统的配置信息(即软件配置文件),这些配置信息包含了软件模块之间的信息流向。软件包配置模块将软件包之间的信息流向和接口对应关系整理成一张有向图,并确认其中无环;如果有环,那么提醒用户软件包中可能有递归调用,因此该配置不能用于嵌入式系统,软件包包括但不限于分立的软件包和用于完成某种整体功能的分立软件包的有机组合;软件系统包括一个或多个软件包(系统软件包、支撑软件包和应用软件包),由一个或多个软件包构成,是计算机系统中由软件(软件包)组成的部分。
函数指针解析模块负责读取软件包配置模块生成的信息流向有向图和接口对应关系,并且解析各个函数指针到其对应的函数。由于一旦接口之间的对应关系被确定了,软件包的函数指针对应的函数也就确定了,因此该模块可以分析出每个函数指针可能对应的底层函数。接下来,该模块整理出整个软件系统的函数调用有向图以及每个函数的栈使用量,并将这些信息打包成文件交给静态分析模块;
其中,静态分析模块根据上述信息,从每个线程的入口点遍历整个函数调用有向图,首先确定该调用图中不存在环(若存在环则报错退出),并寻找函数调用有向图中最长的路径,将其长度作为栈使用量报告给用户,以此得出每个线程的精确最大栈使用量。
进一步地,在步骤2中,所述数据流图是根据软件系统中的软件配置文件生成的软件包之间的信息流向,软件配置文件包括但不限于软件包描述、软件包之间的调用关系、软件包之间的信息流向,通过软件配置文件可以快速的读取到软件包之间的信息、接口及其流向。
进一步地,在步骤3中,所述接口对应图为根据数据流图将软件系统中的软件包作为节点,软件包之间的信息流向的路径作为边构建的有向图,软件包之间的信息流向的路径为软件包之间通过接口调用的函数指针传递数据信息。
进一步地,在步骤4中,检查接口对应图是否有环的方法为,根据深度优先遍历有向图的方法、广度优先遍历有向图的方法或者其它任何遍历方法遍历接口对应图并判断是否有环,如果存在环则软件包中可能有递归调用,因此该配置不能用于嵌入式系统。
进一步地,在步骤6中,根据接口对应图解析每个接口的函数指针对应的下级函数的方法为,根据深度优先遍历或者广度优先遍历进行遍历接口对应图,根据软件包的信息流向的路径通过的接口调用的函数指针,读取(解析)出每个接口的函数指针对应的下级函数,即根据路径读取每个函数指针对应的所有底层函数,下级函数为每个接口的函数指针指向的函数。
进一步地,在步骤7中,所述函数调用有向图中的每个顶点为一个函数,顶点的值为函数的堆栈使用量,根据上级函数指针调用的下级接口解析出所有的函数指针对应的实体函数,并生成函数调用有向图
进一步地,在步骤8中,检查函数调用有向图是否有环的方法为,根据深度优先遍历有向图的方法、广度优先遍历有向图的方法或者其它任何遍历方法遍历函数调用有向图并判断是否有环。
进一步地,在步骤9中,检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量的方法为:从每个线程的入口点遍历整个函数调用有向图,并寻找函数调用有向图中最长的路径,将路径中各个顶点的值(即函数的堆栈使用量)之和作为最大栈使用量,以此得出每个线程的精确最大栈使用量。
本实施给出一个非常简要的具体实施例,阐述该方法如何根据用户需求决定保护域的配置。某软件系统包括五个组件(软件包),即组件(软件包)A、B、C、D和E,其中信息流向为A流向B,B流向C和D,C和D则又流向E。
首先,调用软件包配置读取模块读取软件的配置信息,得到软件模块之间的信息流向,构造软件包之间的信息流向关系图:A->B->(C,D)->E。配置模块确认该软件包的信息流无环,并确定A通过调用B的接口Bi将信息传递给B,B通过调用C的接口Ci将信息传递给C,也通过调用D的接口Di和Dis将信息传递给D。C通过调用E的接口Ec将信息传递给E,D通过调用E的接口Ed将信息传递给E。据此,我们可以构造软件包之间的接口对应图:A->Bi->(Ci->Ec,(Di,Dis)->Ed)。
然后,这一信息被传递给函数指针解析模块。函数指针解析模块解析这个接口对应图,并且找到上级函数指针调用的下级接口。该模块据此解析所有的函数指针对应的实体函数,并生成函数调用有向图;然后根据每个函数的局部变量情况分析每个函数的栈使用量,将该值赋予每个图中的顶点。
最后,这一个含有每个函数栈使用量的函数调用有向图被传递给静态分析模块。静态分析模块根据上述信息,从每个线程的入口点开始遍历函数调用有向图,得到每个线程的最大栈使用量。比如,一个线程的入口若是A中的函数A1,其调用链有两条(链中名称均为函数名):A1->Bi1->Ci1->Ed1和A1->Bi2->Dis1->Ed2,而后者的总栈用量较高,则我们认为最大栈使用量由后者决定。
本公开的实施例提供的一种应用程序堆栈静态分析系统,如图2所示为本公开的一种应用程序堆栈静态分析系统图,该实施例的一种应用程序堆栈静态分析系统包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在应用程序堆栈静态分析系统的软件包配置读取模块、函数指针解析模块和静态分析模块的各自单元中:
其中,软件包配置读取模块,包括以下单元:
数据流图生成单元,用于读取软件配置文件生成数据流图;
接口对应图生成单元,用于根据数据流图生成接口对应图;
接口环检查单元,用于检查接口对应图是否有环,若有环则退出,若没有环则将数据流图和接口对应图传输给函数指针解析模块;
其中,函数指针解析模块,包括以下单元:
数据接口图接收单元,用于接收数据流图和接口对应图;
函数解析单元,用于根据接口对应图解析每个接口的函数指针对应的下级函数;
函数调用图生成单元,用于将每个接口的函数指针对应的下级函数生成函数调用有向图;
函数调用图环检查单元,用于检查函数调用有向图是否有环,若有环则退出,若没有环则将函数调用有向图传输给静态分析模块;
其中,静态分析模块,包括以下单元:
最大栈使用量计算单元,用于静态分析模块检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量。
所述一种应用程序堆栈静态分析系统可以运行于桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备中。所述一种应用程序堆栈静态分析系统,可运行的系统可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述例子仅仅是一种应用程序堆栈静态分析系统的示例,并不构成对一种应用程序堆栈静态分析系统的限定,可以包括比例子更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述一种应用程序堆栈静态分析系统还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述一种应用程序堆栈静态分析系统运行系统的控制中心,利用各种接口和线路连接整个一种应用程序堆栈静态分析系统可运行系统的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述一种应用程序堆栈静态分析系统的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card, SMC),安全数字(SecureDigital, SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
尽管本公开的描述已经相当详尽且特别对几个所述实施例进行了描述,但其并非旨在局限于任何这些细节或实施例或任何特殊实施例,而是应当将其视作是通过参考所附权利要求考虑到现有技术为这些权利要求提供广义的可能性解释,从而有效地涵盖本公开的预定范围。此外,上文以发明人可预见的实施例对本公开进行描述,其目的是为了提供有用的描述,而那些目前尚未预见的对本公开的非实质性改动仍可代表本公开的等效改动。

Claims (8)

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.根据权利要求5所述的一种应用程序堆栈静态分析方法,其特征在于,在步骤7中,所述函数调用有向图中的每个顶点为一个函数,顶点的值为函数的堆栈使用量,根据上级函数指针调用的下级接口解析出所有的函数指针对应的实体函数,并生成函数调用有向图。
7.根据权利要求6所述的一种应用程序堆栈静态分析方法,其特征在于,在步骤9中,检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量的方法为:从每个线程的入口点遍历整个函数调用有向图,并寻找函数调用有向图中最长的路径,将路径中各个顶点的值之和作为最大栈使用量,以此得出每个线程的精确最大栈使用量。
8.一种应用程序堆栈静态分析系统,其特征在于,所述系统包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在应用程序堆栈静态分析系统的软件包配置读取模块、函数指针解析模块和静态分析模块的各自单元中:
其中,软件包配置读取模块,包括以下单元:
数据流图生成单元,用于读取软件配置文件生成数据流图;
接口对应图生成单元,用于根据数据流图生成接口对应图;
接口环检查单元,用于检查接口对应图是否有环,若有环则退出,若没有环则将数据流图和接口对应图传输给函数指针解析模块;
其中,函数指针解析模块,包括以下单元:
数据接口图接收单元,用于接收数据流图和接口对应图;
函数解析单元,用于根据接口对应图解析每个接口的函数指针对应的下级函数;
函数调用图生成单元,用于将每个接口的函数指针对应的下级函数生成函数调用有向图;
函数调用图环检查单元,用于检查函数调用有向图是否有环,若有环则退出,若没有环则将函数调用有向图传输给静态分析模块;
其中,静态分析模块,包括以下单元:
最大栈使用量计算单元,用于静态分析模块检查函数调用有向图与每个线程的入口点,计算软件系统中每个线程的最大栈使用量。
CN201910391220.4A 2019-05-11 2019-05-11 一种应用程序堆栈静态分析方法及系统 Active CN110084042B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910391220.4A CN110084042B (zh) 2019-05-11 2019-05-11 一种应用程序堆栈静态分析方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910391220.4A CN110084042B (zh) 2019-05-11 2019-05-11 一种应用程序堆栈静态分析方法及系统

Publications (2)

Publication Number Publication Date
CN110084042A true CN110084042A (zh) 2019-08-02
CN110084042B CN110084042B (zh) 2021-07-30

Family

ID=67419754

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910391220.4A Active CN110084042B (zh) 2019-05-11 2019-05-11 一种应用程序堆栈静态分析方法及系统

Country Status (1)

Country Link
CN (1) CN110084042B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112000398A (zh) * 2020-08-17 2020-11-27 苏州达家迎信息技术有限公司 底层接口调用链路的确定方法、装置、计算机设备及介质
CN112765022A (zh) * 2021-01-18 2021-05-07 北京长亭未来科技有限公司 一种基于数据流的Webshell静态检测方法及电子设备
CN113312054A (zh) * 2021-05-27 2021-08-27 长沙海格北斗信息技术有限公司 针对嵌入式软件架构的软件栈消耗分析方法及分析装置
CN113805971A (zh) * 2021-09-23 2021-12-17 武汉深之度科技有限公司 一种应用程序运行方法、计算设备及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100153677A1 (en) * 2008-12-11 2010-06-17 Electronics And Telecommunications Research Institute Method for statically allocating stack based on multi thread
CN101876923A (zh) * 2009-11-27 2010-11-03 中国科学院声学研究所 一种用于精确估计嵌入式系统中堆栈需求量的方法
CN102012833A (zh) * 2010-11-09 2011-04-13 北京神舟航天软件技术有限公司 基于编译过程中间结果的静态堆栈检测方法
CN103678137A (zh) * 2013-12-30 2014-03-26 北京控制工程研究所 一种基于list文件任务最大堆栈深度的检测方法
CN104050076A (zh) * 2013-03-12 2014-09-17 阿里巴巴集团控股有限公司 移动终端上的应用软件测试方法、装置及系统
US20160188435A1 (en) * 2014-12-29 2016-06-30 International Business Machines Corporation Fixing anti-patterns in javascript
CN107015904A (zh) * 2016-01-28 2017-08-04 中兴通讯股份有限公司 堆栈的保护方法及装置
CN107729240A (zh) * 2017-09-30 2018-02-23 山东省科学院自动化研究所 嵌入式软件堆栈溢出检测方法和装置
CN107943520A (zh) * 2016-10-11 2018-04-20 腾讯科技(深圳)有限公司 应用堆栈信息获取方法及装置、堆栈信息解析方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100153677A1 (en) * 2008-12-11 2010-06-17 Electronics And Telecommunications Research Institute Method for statically allocating stack based on multi thread
CN101876923A (zh) * 2009-11-27 2010-11-03 中国科学院声学研究所 一种用于精确估计嵌入式系统中堆栈需求量的方法
CN102012833A (zh) * 2010-11-09 2011-04-13 北京神舟航天软件技术有限公司 基于编译过程中间结果的静态堆栈检测方法
CN104050076A (zh) * 2013-03-12 2014-09-17 阿里巴巴集团控股有限公司 移动终端上的应用软件测试方法、装置及系统
CN103678137A (zh) * 2013-12-30 2014-03-26 北京控制工程研究所 一种基于list文件任务最大堆栈深度的检测方法
US20160188435A1 (en) * 2014-12-29 2016-06-30 International Business Machines Corporation Fixing anti-patterns in javascript
CN107015904A (zh) * 2016-01-28 2017-08-04 中兴通讯股份有限公司 堆栈的保护方法及装置
CN107943520A (zh) * 2016-10-11 2018-04-20 腾讯科技(深圳)有限公司 应用堆栈信息获取方法及装置、堆栈信息解析方法及装置
CN107729240A (zh) * 2017-09-30 2018-02-23 山东省科学院自动化研究所 嵌入式软件堆栈溢出检测方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
原义盈: "嵌入式软件堆栈溢出的静态测试方法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑(月刊)》 *
张西超 等: "一种用于分析MCS-51目标码堆栈深度的方法", 《空间控制技术与应用》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112000398A (zh) * 2020-08-17 2020-11-27 苏州达家迎信息技术有限公司 底层接口调用链路的确定方法、装置、计算机设备及介质
CN112000398B (zh) * 2020-08-17 2022-10-28 苏州达家迎信息技术有限公司 底层接口调用链路的确定方法、装置、计算机设备及介质
CN112765022A (zh) * 2021-01-18 2021-05-07 北京长亭未来科技有限公司 一种基于数据流的Webshell静态检测方法及电子设备
CN112765022B (zh) * 2021-01-18 2023-07-25 北京长亭未来科技有限公司 一种基于数据流的Webshell静态检测方法及电子设备
CN113312054A (zh) * 2021-05-27 2021-08-27 长沙海格北斗信息技术有限公司 针对嵌入式软件架构的软件栈消耗分析方法及分析装置
CN113805971A (zh) * 2021-09-23 2021-12-17 武汉深之度科技有限公司 一种应用程序运行方法、计算设备及存储介质
CN113805971B (zh) * 2021-09-23 2023-10-13 武汉深之度科技有限公司 一种应用程序运行方法、计算设备及存储介质

Also Published As

Publication number Publication date
CN110084042B (zh) 2021-07-30

Similar Documents

Publication Publication Date Title
CN110084042A (zh) 一种应用程序堆栈静态分析方法及系统
Alur et al. A temporal logic of nested calls and returns
Spinellis Code quality: the open source perspective
Bouajjani et al. On the completeness of verifying message passing programs under bounded asynchrony
Bouajjani et al. Bounded phase analysis of message-passing programs
US8799883B2 (en) System and method of measuring application resource usage
Tip et al. Slicing class hierarchies in C++
US20070204261A1 (en) Robust software library wrapper method and apparatus
Bouajjani et al. Verifying concurrent programs against sequential specifications
Bouajjani et al. Analysis of recursively parallel programs
Bacci et al. Converging from branching to linear metrics on Markov chains
Lampka et al. Component-based system design: analytic real-time interfaces for state-based component implementations
Heizmann et al. Minimization of visibly pushdown automata using partial Max-SAT
Mäkelä Model checking safety properties in modular high-level nets
CN110046028B (zh) 数据处理方法、装置及服务器
US9916412B2 (en) Automatic generation of test layouts for testing a design rule checking tool
Kauffman et al. Monitorability over unreliable channels
Hartmanns et al. Tweaking the odds in probabilistic timed automata
Lustig et al. Synthesis from Probabilistic Components.
CN114047913A (zh) 一种反例引导的稀疏空间流模型检测方法及系统
Bruynooghe et al. Reuse of results in termination analysis of typed logic programs
US20200034125A1 (en) System and method for eliminating runtime out-of-bounds errors and exceptions
Field et al. Typestate verification: Abstraction techniques and complexity results
Cazorla et al. A process algebra for probabilistic and nondeterministic processes.
CN109800152A (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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20210707

Address after: 528000 room 511, 5th floor, Block E, Foshan National Torch Innovation and entrepreneurship Park, No. 13, Huabao South Road, Chancheng District, Foshan City, Guangdong Province

Applicant after: Foshan Fengfeng Technology Co.,Ltd.

Address before: Room 2703, block 3, xingxinghuayuan, 17 Yingyin Road, Chancheng District, Foshan City, Guangdong Province, 528000

Applicant before: Xiao Yinhao

GR01 Patent grant
GR01 Patent grant