CN111475420B - 一种基于数值抽象的程序资源使用量自动分析方法 - Google Patents
一种基于数值抽象的程序资源使用量自动分析方法 Download PDFInfo
- Publication number
- CN111475420B CN111475420B CN202010382006.5A CN202010382006A CN111475420B CN 111475420 B CN111475420 B CN 111475420B CN 202010382006 A CN202010382006 A CN 202010382006A CN 111475420 B CN111475420 B CN 111475420B
- Authority
- CN
- China
- Prior art keywords
- resource
- program
- numerical
- analysis
- upper bound
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于数值抽象的程序资源使用量自动分析方法,其包括:步骤S1:资源操作API的配置;步骤S2:代码自动插桩;步骤S3:资源引用变量指向分析:通过指向分析得到程序中每个资源引用变量指向的基地址集合及对应的资源大小;利用用于建模资源使用量的数值变量及其依赖关系,对插桩后的代码进行切片,自动剔除与资源操作无关代码,得到数值程序;步骤S4:基于数值抽象的数值程序分析;步骤S5:循环次数上界分析;步骤S6:数值程序分析结果到资源使用量的映射:将分析得到的数值程序分析结果映射到资源使用量的值范围。本发明具有原理简单、适用范围广、分析效率高、分析可靠性好等优点。
Description
技术领域
本发明主要涉及到计算机系统中软件可信性保障技术领域,特指一种基于数值抽象的程序资源使用量自动分析方法。
背景技术
在航空航天等为代表的安全关键嵌入式系统中,受系统环境、硬件资源等因素制约,程序能消耗的资源(如堆内存、栈内存、句柄等资源)往往是受限的。当程序所申请的资源超过计算机可以分配的空闲资源时,就会导致程序的运行效率降低,甚至可能引发计算机资源耗尽而发生系统故障。因此,在程序运行前对程序进行分析,保守地估计程序运行过程中可能消耗的某种资源的最大量(峰值),辅助余量设计,对于保障整个系统的正常运行具有重要意义。程序在运行过程中对资源的使用量随运行状态发生改变。程序资源使用量分析方法的目的是,通过静态的方法事先估计程序在不同程序点处需要占用的资源数量,尤其是整个程序峰值时的资源消耗量的上界。现有的资源使用量上界分析方法主要考虑堆内存的使用量,主要包括以下4个步骤:
S1:扩展符号执行的内存模型,使用增强的符号化内存模型来建模程序当前状态下堆内存使用量和历史消耗峰值(即:到目前为止的最大使用量)。
S2:基于S1的内存模型,对程序开展符号执行。符号执行过程中,对于程序中的循环,采用循环展开方式处理循环。
S3:针对S2符号执行过程产生的每条路径,采用约束求解技术求得每条路径上堆内存的峰值消耗量。
S4:根据S3所得每条路径上堆内存的峰值消耗量的结果,求得整个程序峰值时堆内存使用量的上界。
上述现有方式存在以下的几点不足:
1.循环处理能力差:采用符号执行方法进行程序资源上界分析时,需要对循环展开。如果循环次数难以事先确定或者循环次数为符号值,则无法知道要具体展开多少次。分析得到的结果也不是可靠的资源使用上界。
2.仅支持特定资源类型:目前已有程序资源上界分析方法主要考虑堆内存,但是实际程序中还会消耗很多其他类型资源,如文件句柄、网络套接字等。
3、分析效率低:现有的分析技术采用路径敏感的符号执行方法,需要针对每条符号路径采用约束求解技术计算资源使用情况。而符号执行存在路径爆炸问题且约束求解代价较大,因此基于符号执行的分析效率较低。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、适用范围广、分析效率高、分析可靠性好的基于数值抽象的程序资源使用量自动分析方法。
为解决上述技术问题,本发明采用以下技术方案:
一种基于数值抽象的程序资源使用量自动分析方法,其包括:
步骤S1:资源操作API的配置;
步骤S2:代码自动插桩:针对待分析程序的源代码,采用模式匹配方法识别配置的资源操作API所在程序点,引入辅助的整型数值变量对资源使用量进行建模,并根据API的类型自动插桩用于对资源使用情况进行建模的数值语句,获得资源感知程序;
步骤S3:资源引用变量指向分析:通过指向分析得到程序中每个资源相关引用变量指向的基地址集合及对应的资源大小;利用数值变量及其依赖关系,对插桩后的代码进行切片,自动剔除与资源操作无关代码,得到数值程序;
步骤S4:基于数值抽象的数值程序分析:使用基于数值抽象域的抽象解释技术对所得数值程序开展自动分析,获得各程序点处数值型变量之间的约束关系;得到各程序点处建模资源使用量的辅助变量的值范围上界;
步骤S5:循环次数上界分析:在分析循环结构时,基于数值抽象域先计算循环次数的上界,再利用循环次数上界,计算各数值型变量间的关系;
步骤S6:数值程序分析结果到资源使用量的映射:将分析得到的数值程序分析结果映射到资源使用量的值范围。
作为本发明的进一步改进:所述步骤S1的具体步骤为:
步骤S11:用户配置需要分析的各项资源所对应的资源申请、资源变更大小、资源释放及相关资源操作API名称;
步骤S12:将S11步得到的资源操作API列表形成标准格式的配置文件。作为本发明的进一步改进:所述步骤S2的具体步骤为:
步骤S21:为每种类型资源引入两个整型辅助变量resc_XXX_cur和resc_XXX_peak,其中XXX表示资源的类型,分别表示程序运行过程中资源的当前使用量和历史峰值;
步骤S22:通过模式匹配步骤S1中资源操作API配置文件,在每个资源操作API所在程序点,根据该API的类型,插桩对应的针对辅助数值变量进行操作的语句,来建模资源使用量的变化,获得资源感知程序。
作为本发明的进一步改进:所述步骤S3的具体步骤为:
步骤S31:通过模式匹配识别步骤S1中配置的资源申请操作API所在的所有程序点,用其所在程序点在程序中的行号及API名称的组合得到抽象的基地址作为键,API申请的资源量作为值,构造抽象基地址与资源量对应关系表T1;
步骤S32:以程序中所有资源相关引用变量作为键,每个引用变量可能指向的基地址集合作为值,生成引用变量及基地址集合对应关系表T2;
步骤S33:基于数值变量及其依赖关系,处理步骤S2所得资源感知程序,只保留与资源使用建模辅助变量操作相关及其依赖的程序语句,包括赋值语句及其所在的条件结构、循环结构语句和函数首部;
步骤S34:通过查找表T1和T2,得到每个引用变量及其所指向的资源的大小,若引用变量对应基地址集合含有多个基地址,设这些基地址对应的资源量中的最大值为max、最小值为min,则以区间[min,max]作为该引用变量对应的资源量;通过得到每个引用变量ptr所对应资源量的值,即可得到步骤S2建模语句tmp_size=resc_find_size(ptr)中tmp_size的区间值范围,进而删除资源相关API操作语句和包含resc_find_size函数的语句,得到纯数值程序。
作为本发明的进一步改进:所述步骤S4的具体步骤为:
步骤S41:使用基于数值抽象域的抽象解释技术对步骤S3所得数值程序开展自动分析,获得各程序点处数值型变量之间的约束关系;
步骤S42:利用整型变量之间的约束关系,计算得到各程序点资源使用建模辅助变量的值范围上界。
作为本发明的进一步改进:所述步骤S5中的具体步骤为:
步骤S51:使用基于差分约束的数值抽象域,分析循环获得程序的循环次数上界;
步骤S52:基于循环次数上界、单次循环时循环体内资源使用建模辅助变量的值变化量,计算得到资源使用建模辅助辅助变量的保守上界。
作为本发明的进一步改进:所述步骤S6中结果映射,其规则包括:各程序点处资源使用建模辅助变量resc_XXX_cur和resc_XXX_peak的值范围上界,其中XXX表示资源的类型,分别表示程序运行到该程序点处,类型为XXX的资源的当前占用量保守上界和历史最大占用量保守上界;程序出口处的resc_XXX_peak的值范围上界表示,整个程序运行过程中类型为XXX的资源峰值消耗量保守上界,即程序真正运行起来后对XXX类型资源的消耗量不可能超过程序出口处resc_XXX_peak的值范围上界。
与现有技术相比,本发明的优点在于:
1、本发明的基于数值抽象的程序资源使用量自动分析方法,使用抽象解释技术来分析循环,可以应对循环次数难以事先确定或循环次数为符号值的情形,并且能保证得到的资源使用量上界是可靠的(即保守的,指的是程序真实运行时肯定不会超过该值)。本发明提出的框架适用于各种资源类型。本发明将原程序转换为数值程序,利用现有的基于数值抽象域的数值程序分析方法,本质上是一种流敏感而非路径敏感的分析方法,从而可以以较高的效率计算得到程序的可靠的资源使用量上界。
2、本发明的基于数值抽象的程序资源使用量自动分析方法,循环处理能力强,现有的分析技术采用符号执行方法进行程序资源上界分析时,循环处理能力差,分析得到的结果也不是可靠的资源使用上界。与之相比,本发明使用抽象解释技术来分析循环,可以应对循环次数难以事先确定或循环次数为符号值的情形,并且能保证得到的资源使用量上界是可靠的。
3、本发明的基于数值抽象的程序资源使用量自动分析方法,支持多种资源类型,相比现有的分析技术主要考虑堆内存,但是实际程序中还会消耗很多其他类型资源,如文件句柄、网络套接字等。本发明提出的框架适用于各种资源类型。
4、本发明的基于数值抽象的程序资源使用量自动分析方法,分析效率高,相比现有的分析技术采用路径敏感的符号执行方法,符号执行存在路径爆炸问题且约束求解代价较大,因此基于符号执行的分析效率较低。本发明将原程序转换为数值程序,利用现有的基于数值抽象域的数值程序分析方法,本质上是一种流敏感而非路径敏感的分析方法,从而可以以较高的效率计算得到程序的可靠的资源使用量上界。
附图说明
图1是本发明方法的流程示意图。
图2是本发明在具体应用实例中一个堆内存资源操作原程序示意图。
图3是本发明在具体应用实例中插桩建模语句得到的资源感知程序示意图。
图4是本发明在具体应用实例中基于数值变量及其依赖关系切片后所得的数值程序示意图。
具体实施方式
以下将结合说明书附图和具体实施例对本发明做进一步详细说明。
在本发明进行阐述过程中,包含以下本领域的术语,定义如下:
资源:在一个计算机系统中,通常都含有各种各样的硬件和软件资源。归纳起来可将资源分为四类:处理器、存储器、I/O设备以及信息(数据和程序)。本发明关注的资源是操作系统系统调用API提供给应用程序的资源的抽象,包括堆内存、栈内存、文件句柄、进程等。
资源使用量:程序在运行过程中向计算机系统申请并使用的某项计算机资源的数量,如占用的堆内存大小、同时打开的文件句柄数量等。
数值程序:一类只关注整数、浮点、布尔三种基本数据类型及其运算的程序。
程序分析:自动化地处理计算机程序,确认或者发现程序的性质。直观来说,根据是否要运行程序,将程序分析划分为静态分析与动态分析。本专利主要采用静态分析技术。
抽象解释:抽象解释是静态分析技术的一种,它通过在抽象域上计算程序的抽象不动点来表达程序的抽象语义。
数值抽象:将原程序中具体的状态集合转化为数值型变量上的值约束,并且确保数值型变量的值范围能保守(可靠)地反映原程序所满足的一些数值性质。
如图1所示,本发明的一种基于数值抽象的程序资源使用量自动分析方法,在抽象解释框架下,给出了一种程序资源使用量自动分析的全过程,其步骤包括:
步骤S1:资源操作API的配置:程序中资源申请、变更大小、释放等相关资源操作API的配置。
步骤S2:代码自动插桩:针对待分析程序的源代码,采用模式匹配方法识别步骤S1配置的资源操作API所在程序点,引入辅助的整型数值变量对资源使用量进行建模,并根据API的类型自动插桩用于对资源使用情况进行建模的数值语句,获得资源感知程序。
步骤S3:资源引用变量指向分析:通过指向分析得到程序中每个资源引用变量指向的基地址集合及对应的资源大小。在此基础上,利用数值变量及其依赖关系,对步骤S2插桩后的代码进行切片,自动剔除与资源操作无关代码,得到数值程序。
步骤S4:基于数值抽象的数值程序分析:使用基于数值抽象域的抽象解释技术对步骤S3所得数值程序开展自动分析,获得各程序点处数值型变量之间的约束关系,进一步得到各程序点处建模资源使用量的辅助变量的值范围上界。
步骤S5:循环次数上界分析:在步骤S4中分析循环结构时,使用基于差分约束的数值抽象域先计算循环次数的可靠(保守)上界,再利用循环次数上界,计算各数值型变量间的关系。
步骤S6:数值程序分析结果到资源使用量的映射:将步骤S4和S5分析得到的数值程序分析结果映射到资源使用量的值范围,尤其是资源使用量上界。本发明在具体应用实例中,所述步骤S1的具体步骤为:
步骤S11:用户配置需要分析的各项资源所对应的资源申请、资源变更大小、资源释放等相关资源操作API名称。
步骤S12:将S11步得到的资源操作API列表形成标准格式的配置文件。本发明在具体应用实例中,所述步骤S2的具体步骤为:
步骤S21:为每种类型资源引入两个整型辅助变量resc_XXX_cur和resc_XXX_peak(其中XXX表示资源的类型),分别表示程序运行过程中资源的当前使用量和历史峰值(到目前为止的最大使用量)。
步骤S22:通过模式匹配步骤S1中资源操作API配置文件,在每个资源操作API所在程序点,根据该API的类型,插桩对应的针对辅助数值变量进行操作的语句,来建模资源使用量的变化,获得资源感知程序。
以堆内存资源操作API为例,步骤S1中资源操作API配置文件中堆内存资源申请操作API有malloc(),而堆内存释放操作API有free()。步骤S21中,会为堆内存资源引入整型辅助变量resc_heap_cur、resc_heap_peak。初始时,将两个变量分别初始化为0。随着堆操作的进行,堆内存资源当前使用量resc_heap_cur不断变化,具体表现为分配堆内存时增加,释放堆内存时减少。每次resc_heap_cur增加,由于resc_heap_peak表示到目前为止堆内存使用量峰值,需要判断堆内存资源的当前使用量是否超过历史峰值,根据resc_heap_cur对其进行更新,具体表现为当resc_heap_cur超过resc_heap_peak时,就将resc_heap_peak的值更新为resc_heap_cur的值。这样一直进行到程序结束,此时resc_heap_peak就代表整个程序从开始到结束过程中的堆内存资源使用量上界。基于上述,可以利用引入的辅助变量,来建模malloc()和free()这两个API,以模拟资源的变化。具体如下表1所示。其中,resc_find_size(ptr)函数用来指示步骤S3中进行指向分析时返回指针ptr指向地址对应的堆内存大小。
表1C程序堆内存资源操作API建模
本发明在具体应用实例中,所述步骤S3的具体步骤为:
步骤S31:通过模式匹配识别步骤S1中配置的资源申请操作API所在的所有程序点,用其所在程序点在程序中的行号及API名称的组合(如malloc_10)得到抽象的基地址作为键,API申请的资源量作为值,构造抽象基地址与资源量对应关系表T1。
步骤S32:以程序中所有资源相关引用变量作为键,每个引用变量可能指向的基地址集合作为值,生成引用变量及基地址集合对应关系表T2。以堆内存资源申请API的malloc函数为例,资源引用变量赋值语句的指向分析如下表2所示。
步骤S33:基于数值变量及其依赖关系,处理步骤S2所得资源感知程序,只保留与资源使用建模辅助变量操作相关及其依赖的程序语句,包括赋值语句及其所在的条件结构、循环结构语句和函数首部。
步骤S34:通过查找表T1和T2,得到每个引用变量及其所指向的资源的大小,若引用变量对应基地址集合含有多个基地址,设这些基地址对应的资源量中的最大值为max、最小值为min,则以区间[min,max]作为该引用变量对应的资源量。通过得到每个引用变量ptr的对应资源量的值,即可得到步骤S2建模语句tmp_size=resc_find_size(ptr)中tmp_size的区间值范围,进而可以删去资源相关API操作语句和包含resc_find_size函数的语句,得到纯数值程序。
表2资源引用变量相关赋值语句的指向分析
本发明在具体应用实例中,所述步骤S4的具体步骤为:
步骤S41:使用基于数值抽象域的抽象解释技术对步骤S3所得数值程序开展自动分析,获得各程序点处数值型变量之间的约束关系。
步骤S42:利用整型变量之间的约束关系,计算得到各程序点资源使用建模辅助变量的值范围上界。
本发明在具体应用实例中,所述步骤S5中的具体步骤为:
步骤S51:使用基于差分约束的数值抽象域,分析循环获得程序的循环次数上界(可能是符号化表达式)。
步骤S52:基于循环次数上界、单次循环时循环体内资源使用建模辅助变量的值变化量,计算得到资源使用建模辅助辅助变量的保守上界。
本发明在具体应用实例中,所述步骤S6中结果映射,其主要规则包括:
各程序点处资源使用建模辅助变量resc_XXX_cur和resc_XXX_peak(其中XXX表示资源的类型)的值范围上界,分别表示程序运行到该程序点处,类型为XXX的资源的占用量保守上界和历史最大占用量保守上界。程序出口处的resc_XXX_peak的值范围上界表示,整个程序运行过程中类型为XXX的资源峰值消耗量保守上界,即程序真正运行起来后对XXX类型资源的消耗量不可能超过程序出口处resc_XXX_peak的值范围上界。
在本发明的上述步骤中,对于步骤S2中代码插桩的方法,其它采用代码插桩技术插入资源使用建模辅助变量语句的方法都属于本发明代码插桩的有效变体,其关键点在插入的辅助变量语句能够准确刻画程序的资源使用量以及使用量上界的变化。
在本发明的上述步骤中,对于步骤S3中基于资源引用变量指向分析和资源使用建模辅助变量及其依赖关系,进行资源感知数值程序切片提取的方法,其它基于指向分析和变量依赖关系进行程序切片都属于本发明资源感知数值程序切片提取方法的有效变体,其关键点在于删除与资源使用量分析无关的语句,同时又不影响精确刻画程序内部资源使用量变化情况。
在本发明的上述步骤中,对于S5中基于数值抽象域方法的循环处理策略,其它基于数值抽象域方法得到循环的上界及资源使用建模辅助变量的值范围都属于本发明循环处理策略的有效变体,其关键点在于获取尽可能精确的循环上界次数以及分析得到循环中资源使用量保守范围。
以包含堆内存资源操作API的C程序为例,图2–图4分别为原程序、插桩建模语句得到的资源感知程序和基于资源使用建模辅助变量及其依赖关系切片后所得的数值程序的实际执行过程简单示意图。参见图2为一个堆内存资源操作原程序示意图,图2中每个List结构类型占用8字节内存;图3为插桩建模语句得到的资源感知程序示意图。图4为基于数值变量及其依赖关系切片后所得的数值程序示意图。通过基于数值抽象的循环上界求解方法,求解得到两个循环的执行次数上界均为n。于是,新引入的辅助变量语句的执行次数均为n,进而得到所有循环结束(即程序结束)时resc_heap_cur的值为0,resc_heap_peak的值为n*8。最后,映射回原程序的资源使用量,可以分析得到原程序在程序结束时的堆内存资源使用量为0,整个程序运行过程中的堆内存资源使用量上界为n*8字节。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (5)
1.一种基于数值抽象的程序资源使用量自动分析方法,其特征在于,包括:
步骤S1:资源操作API的配置;
步骤S2:代码自动插桩:针对待分析程序的源代码,采用模式匹配方法识别配置的资源操作API所在程序点,引入辅助的整型数值变量对资源使用量进行建模,并根据API的类型自动插桩用于对资源使用情况进行建模的数值语句,获得资源感知程序;具体步骤为:
步骤S21:为每种类型资源引入两个整型辅助变量resc_XXX_cur和resc_XXX_peak,其中XXX表示资源的类型,分别表示程序运行过程中资源的当前使用量和历史峰值;
步骤S22:通过模式匹配步骤S1中资源操作API配置文件,在每个资源操作API所在程序点,根据该API的类型,插桩对应的针对辅助数值变量进行操作的语句,来建模资源使用量的变化,获得资源感知程序;
步骤S3:资源引用变量指向分析:通过指向分析得到程序中每个资源引用变量指向的基地址集合及对应的资源大小;利用用于建模资源使用量的数值变量及其依赖关系,对插桩后的代码进行切片,自动剔除与资源操作无关代码,得到数值程序;具体步骤为:
步骤S31:通过模式匹配识别步骤S1中配置的资源申请操作API所在的所有程序点,用其所在程序点在程序中的行号及API名称的组合得到抽象的基地址作为键,API申请的资源量作为值,构造抽象基地址与资源量对应关系表T1;
步骤S32:以程序中所有资源相关引用变量作为键,每个引用变量可能指向的基地址集合作为值,生成引用变量及基地址集合对应关系表T2;
步骤S33:基于数值变量及其依赖关系,处理步骤S2所得资源感知程序,只保留与资源使用建模辅助变量操作相关及其依赖的程序语句,包括赋值语句及其所在的条件结构、循环结构语句和函数首部;
步骤S34:通过查找表T1和T2,得到每个引用变量及其所指向的资源的大小,若引用变量对应基地址集合含有多个基地址,设这些基地址对应的资源量中的最大值为max、最小值为min,则以区间[min, max]作为该引用变量对应的资源量;通过得到每个引用变量ptr的对应资源量的值,即可得到建模语句tmp_size=resc_find_size(ptr)中tmp_size的区间值范围,进而删去资源相关API操作语句和包含resc_find_size函数的语句,得到纯数值程序;
步骤S4:基于数值抽象的数值程序分析:使用基于数值抽象域的抽象解释技术对所得数值程序开展自动分析,获得各程序点处数值型变量之间的约束关系;得到各程序点处建模资源使用量的数值变量的值范围上界;
步骤S5:循环次数上界分析:在分析循环结构时,基于数值抽象域先计算循环次数的上界,再利用循环次数上界,计算各数值型变量间的关系;
步骤S6:数值程序分析结果到资源使用量的映射:将分析得到的数值程序分析结果映射到资源使用量的值范围。
2.根据权利要求1所述的基于数值抽象的程序资源使用量自动分析方法,其特征在于,所述步骤S1的具体步骤为:
步骤S11:用户配置需要分析的各项资源所对应的资源申请、资源变更大小、资源释放及相关资源操作API名称;
步骤S12:将S11步得到的资源操作API列表形成标准格式的配置文件。
3.根据权利要求1所述的基于数值抽象的程序资源使用量自动分析方法,其特征在于,所述步骤S4的具体步骤为:
步骤S41:使用基于数值抽象域的抽象解释技术对步骤S3所得数值程序开展自动分析,获得各程序点处数值型变量之间的约束关系;
步骤S42:利用整型变量之间的约束关系,计算得到各程序点资源使用建模辅助变量的值范围上界。
4.根据权利要求1-3中任意一项所述的基于数值抽象的程序资源使用量自动分析方法,其特征在于,所述步骤S5中的具体步骤为:
步骤S51:使用基于差分约束的数值抽象域,分析循环获得程序的循环次数上界;
步骤S52:基于循环次数上界、单次循环时循环体内资源使用建模辅助变量的值变化量,计算得到资源使用建模辅助辅助变量的保守上界。
5.根据权利要求1-3中任意一项所述的基于数值抽象的程序资源使用量自动分析方法,其特征在于,所述步骤S6中结果映射,其规则包括:各程序点处资源使用建模辅助变量resc_XXX_cur和resc_XXX_peak的值范围上界,其中XXX表示资源的类型,分别表示程序运行到该程序点处,类型为XXX的资源的当前占用量保守上界和历史最大占用量保守上界;程序出口处的resc_XXX_peak的值范围上界表示,整个程序运行过程中类型为XXX的资源峰值消耗量保守上界,即程序真正运行起来后对XXX类型资源的消耗量不可能超过程序出口处resc_XXX_peak的值范围上界。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010382006.5A CN111475420B (zh) | 2020-05-08 | 2020-05-08 | 一种基于数值抽象的程序资源使用量自动分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010382006.5A CN111475420B (zh) | 2020-05-08 | 2020-05-08 | 一种基于数值抽象的程序资源使用量自动分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111475420A CN111475420A (zh) | 2020-07-31 |
CN111475420B true CN111475420B (zh) | 2023-04-28 |
Family
ID=71762223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010382006.5A Active CN111475420B (zh) | 2020-05-08 | 2020-05-08 | 一种基于数值抽象的程序资源使用量自动分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111475420B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617115A (zh) * | 2013-10-30 | 2014-03-05 | 北京信息控制研究所 | 一种基于抽象解释和模型验证的运行时错误分析方法 |
JP2018147106A (ja) * | 2017-03-02 | 2018-09-20 | 富士通株式会社 | プログラム分析装置、プログラム分析方法及びプログラム分析プログラム |
CN108804136A (zh) * | 2018-05-31 | 2018-11-13 | 中国人民解放军国防科技大学 | 一种基于名称语义的配置项类型约束推断方法 |
CN109388573A (zh) * | 2018-10-23 | 2019-02-26 | 北京轩宇信息技术有限公司 | 一种无漏报的中断驱动型程序运行时错误检测方法和系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7606774B2 (en) * | 2006-06-21 | 2009-10-20 | Microsoft Corporation | Computer implemented cover process approximating quantifier elimination |
US8266598B2 (en) * | 2008-05-05 | 2012-09-11 | Microsoft Corporation | Bounding resource consumption using abstract interpretation |
US8402439B2 (en) * | 2008-06-27 | 2013-03-19 | Microsoft Corporation | Program analysis as constraint solving |
US8397221B2 (en) * | 2008-10-07 | 2013-03-12 | Microsoft Corporation | Calculating resource bounds of programs manipulating recursive data structures and collections |
US8752029B2 (en) * | 2009-09-29 | 2014-06-10 | Microsoft Corporation | Computing a symbolic bound for a procedure |
US8856751B2 (en) * | 2012-09-20 | 2014-10-07 | Fujitsu Limited | Abstract symbolic execution for scaling symbolic execution generation and automatic test generation |
JP6420524B2 (ja) * | 2016-03-28 | 2018-11-07 | 株式会社日立製作所 | 分析用サーバ装置、データ解析システム、及びデータ解析方法 |
-
2020
- 2020-05-08 CN CN202010382006.5A patent/CN111475420B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617115A (zh) * | 2013-10-30 | 2014-03-05 | 北京信息控制研究所 | 一种基于抽象解释和模型验证的运行时错误分析方法 |
JP2018147106A (ja) * | 2017-03-02 | 2018-09-20 | 富士通株式会社 | プログラム分析装置、プログラム分析方法及びプログラム分析プログラム |
CN108804136A (zh) * | 2018-05-31 | 2018-11-13 | 中国人民解放军国防科技大学 | 一种基于名称语义的配置项类型约束推断方法 |
CN109388573A (zh) * | 2018-10-23 | 2019-02-26 | 北京轩宇信息技术有限公司 | 一种无漏报的中断驱动型程序运行时错误检测方法和系统 |
Non-Patent Citations (6)
Title |
---|
A. SERRANO.Resource Usage Analysis of Logic Programs via Abstract Interpretation Using Sized Types.Theory and Practice of Logic Programming (TPLP).2014,全文. * |
Mooly Sagiv.Lecture 7: Introduction to Abstract Interpretation.Automatic Software Verification.2015,全文. * |
侯苏宁 ; 陈立前 ; 王昭飞 ; 王戟 ; .一个面向C和Fortran数值程序的静态分析工具.计算机工程与科学.2011,(03),全文. * |
周林 ; 孙玉龙 ; 甘水滔 ; 秦晓军 ; .一种基于抽象解释的二进制代码测试方法.信息工程大学学报.2016,(01),全文. * |
李仁见 ; 刘万伟 ; 王昭飞 ; 吴学光 ; .精确的堆内存使用量上界分析.武汉大学学报(理学版).2011,(06),全文. * |
赵云山 ; 宫云战 ; 周傲 ; 王前 ; 周虹伯 ; .静态缺陷检测中的误报消除技术研究.计算机研究与发展.2012,(09),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111475420A (zh) | 2020-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8286149B2 (en) | Apparatus for and method of implementing feedback directed dependency analysis of software applications | |
JP5147728B2 (ja) | 質的に注釈を付けられた注釈付きコード | |
US20040226006A1 (en) | Program slicing for codesign of embedded systems | |
WO2014062950A1 (en) | Code dependency calculation | |
JP2007528059A (ja) | ソフトウェアのモデル化、抽象、および分析のためのシステムと方法 | |
JP2022552077A (ja) | 強化された同時並行性ガーベッジ収集スタック走査 | |
EP2702490B1 (en) | Conservative garbage collecting and tagged integers for memory management | |
Bonakdarpour et al. | Time-triggered runtime verification | |
Haller et al. | Mempick: High-level data structure detection in c/c++ binaries | |
Crocker | Safe object-oriented software: the verified design-by-contract paradigm | |
KR101886203B1 (ko) | 프로그램 분석 장치 및 방법 | |
US10318676B2 (en) | Techniques for statistical frequency enhancement of statically timed designs | |
US20110321001A1 (en) | Visualization of runtime analysis across dynamic boundaries | |
CN111475420B (zh) | 一种基于数值抽象的程序资源使用量自动分析方法 | |
Codish et al. | Efficient analysis of concurrent constraint logic programs | |
Kaya et al. | A new cohesion metric and restructuring technique for object oriented paradigm | |
Shaikh et al. | UOST: UML/OCL aggressive slicing technique for efficient verification of models | |
Yi et al. | Incorporating resource safety verification to executable model-based development for embedded systems | |
CN111400135A (zh) | 一种业务数据的提取方法及装置 | |
Hendriks et al. | Reconstructing critical paths from execution traces | |
Dooley et al. | Detecting and using critical paths at runtime in message driven parallel programs | |
CN114579095A (zh) | 一种基于AspectJ实现AOP的开发方法、装置、设备及介质 | |
CN112783574A (zh) | 应用程序开发方法、装置、设备和存储介质 | |
CN109299004B (zh) | 关键元素差异性分析方法及系统 | |
CN113031964A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |