一种过程变量的存储方法及装置制造方法及图纸

技术编号:11385252 阅读:92 留言:0更新日期:2015-05-01 12:17
本发明专利技术公开了一种过程变量的存储方法及装置,涉及通信领域,降低了系统分析的开销。具体方案为:为目标程序分配中间帧;其中,目标程序中包含被测函数;通过执行入口桩函数,获得被测函数被调用时的调用信息,将调用信息存储在存储区中,并将调用信息在存储区中的存储地址存储在中间帧中;通过执行出口桩函数,获得被测函数被调用时的返回信息,并根据中间帧中存储的调用信息在存储区中的存储地址,将返回信息存储在存储区中,调用信息和返回信息存储在存储区中的同一个存储单元的两个子单元中。本发明专利技术用于过程变量的存储过程中。

【技术实现步骤摘要】

本专利技术涉及通信领域,尤其涉及一种过程变量的存储方法及装置
技术介绍
随着计算机技术的不断发展,软件动态测试变得越来越重要,在软件动态测试中,插桩技术是一种基本的测试手段。插桩技术主要是通过在被测程序中插入相应的语句,以便在程序执行过程中获得所需的信息,从而可以根据获得的信息进行系统分析和性能收集。例如,如图1所示,在某个任务调用函数A(被测函数)的过程中,对函数A的出入口进行插桩之后,通过分析该任务对应的堆栈可以获得在执行桩函数A1时收集到的函数A被调用时的参数、时间t1等相关信息,以及在执行桩函数A2时收集到的函数A被调用时的返回值、时间t2等相关信息,这样通过持续对函数A被调用的相关信息的收集便可以获得函数A随输入参数变化的输出以及开销。在现有技术中,常用的插桩方法是:在某个任务调用函数A(被测函数)的过程中,通过修改函数A的入口指令,将程序跳转到桩函数A1执行,以便收集函数A被调用时的相关信息M1,将M1记录在存储区S中,将函数A的原返回地址Ra记录在全局表RT中,并修改函数A的返回地址为RetA2,在桩函数A1执行完成之后,继续执行函数A,当函数A执行完成之后,根据RetA2返回并执行桩函数A2,以便收集函数A被调用时的相关信息M2,并将M2记录在存储区S中,最后,从全局表RT中恢复原返回地址Ra,以便根据原返回地址Ra返回函数A的原调用者继续执行程序。现有技术中至少存在如下问题:由于系统分析和性能收集均是基于单次调用时在函数的入口和出口处采集到的所有存在对应关系的信息对(即M1和M2)进行的,而若存在多个任务并行或嵌套调用同一个被测函数,则单次调用该函数时,在该函数的入口和出口处分别采集到的信息存在极大的可能被记录在存储区中较远的位置,这样在进行离线分析时,需要相当复杂的分析才能得到采集到的所有存在对应关系的信息对,增加了系统分析的开销。
技术实现思路
本专利技术提供一种过程变量的存储方法及装置,降低了系统分析的开销。为达到上述目的,本专利技术采用如下技术方案:本专利技术的第一方面,提供一种过程变量的存储方法,包括:为目标程序分配中间帧;其中,所述目标程序中包含被测函数;通过执行入口桩函数,获得所述被测函数被调用时的调用信息,将所述调用信息存储在存储区中,并将所述调用信息在所述存储区中的存储地址存储在所述中间帧中;通过执行出口桩函数,获得所述被测函数被调用时的返回信息,并根据所述中间帧中存储的所述调用信息在所述存储区的中存储地址,将所述返回信息存储在所述存储区中,其中,所述调用信息和所述返回信息存储在所述存储区中的同一个存储单元的两个子单元中。结合第一方面,在第一种可能的实现方式中,在所述为目标程序分配中间帧之前,还包括:对所述目标程序进行分析,获得所述目标程序的应用二进制接口ABI规则;根据所述被测函数的函数名,查找所述目标程序中的所述被测函数,并根据所述被测函数的函数名和所述ABI规则对所述目标程序进行分析,获得所述被测函数的参数调用规则;根据所述ABI规则和所述被测函数的参数调用规则生成第一中间汇编码和第二中间汇编码,并对所述被测函数进行二进制动态插桩;其中,所述第一中间汇编码用于调用所述入口桩函数,所述第二中间汇编码用于调用所述出口桩函数。结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述为目标程序分配中间帧,包括:通过执行所述第一中间汇编码,为所述目标程序分配所述中间帧,并将所述被测函数的返回地址、所述被测函数的参数表和指向所述参数表的第一指针存储在所述中间帧中;所述通过执行入口桩函数,获得所述被测函数被调用时的调用信息,包括:通过执行所述入口桩函数,将根据所述第一指针获得的所述被测函数的参数表中的参数作为所述被测函数被调用时的调用信息。结合第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在所述通过执行入口桩函数,获得所述被测函数被调用时的调用信息,将所述调用信息存储在存储区中,并将所述调用信息在所述存储区中的存储地址存储在所述中间帧中之后,还包括:通过返回执行所述第一中间汇编码,将所述第一指针修改为所述第二中间汇编码的入口地址;通过执行所述被测函数,获得所述被测函数的返回值;根据所述第二中间汇编码的入口地址,执行所述第二中间汇编码,并通过执行所述第二中间汇编码,将所述返回值和指向所述返回值的第二指针存储在所述中间帧中。结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述通过执行出口桩函数,获得所述被测函数被调用时的返回信息,包括:通过执行所述出口桩函数,将根据所述第二指针获得的所述返回值作为所述被测函数被调用时的返回信息。结合第一方面,在第五种可能的实现方式中,在所述为目标程序分配中间帧之前,还包括:对所述目标程序进行分析,获得所述被测函数的参数个数;所述为所述目标程序分配中间帧,包括:根据所述被测函数的参数个数,为所述目标程序分配存储空间大于存储所述被测函数的参数所需空间的中间帧。本专利技术的第二方面,提供一种过程变量的存储装置,包括:分配单元,用于为目标程序分配中间帧;其中,所述目标程序中包含被测函数;处理单元,用于通过执行入口桩函数,获得所述被测函数被调用时的调用信息,将所述调用信息存储在存储区中,并将所述调用信息在所述存储区中的存储地址存储在所述分配单元分配的所述中间帧中;所述处理单元,还用于通过执行出口桩函数,获得所述被测函数被调用时的返回信息,并根据所述中间帧中存储的所述调用信息在所述存储区中的存储地址,将所述返回信息存储在所述存储区中,其中,所述调用信息和所述返回信息存储在所述存储区中的同一个存储单元的两个子单元中。结合第二方面,在第一种可能的实现方式中,还包括:应用二进制接口ABI分析单元,用于对所述目标程序进行分析,获得所述目标程序的ABI规则,根据所述被测函数的函数名,查找所述目标程序中的所述被测函数,并根据所述被测函数的函数名和所述ABI规则对所述目标程序进行分析,获得所述被测函数的参数调用规则;插桩单元,用于根据所述ABI分析单元分析得到的所述ABI规则和所述被测函数的参数调用规则生成第一中间汇编码和第二中间汇编码,并对所述被测函数进行二进制动态插桩;其中本文档来自技高网
...
一种过程变量的存储方法及装置

【技术保护点】
一种过程变量的存储方法,其特征在于,包括:为目标程序分配中间帧;其中,所述目标程序中包含被测函数;通过执行入口桩函数,获得所述被测函数被调用时的调用信息,将所述调用信息存储在存储区中,并将所述调用信息在所述存储区中的存储地址存储在所述中间帧中;通过执行出口桩函数,获得所述被测函数被调用时的返回信息,并根据所述中间帧中存储的所述调用信息在所述存储区中的存储地址,将所述返回信息存储在所述存储区中,其中,所述调用信息和所述返回信息存储在所述存储区中的同一个存储单元的两个子单元中。

【技术特征摘要】
1.一种过程变量的存储方法,其特征在于,包括:
为目标程序分配中间帧;其中,所述目标程序中包含被测函数;
通过执行入口桩函数,获得所述被测函数被调用时的调用信息,
将所述调用信息存储在存储区中,并将所述调用信息在所述存储区中
的存储地址存储在所述中间帧中;
通过执行出口桩函数,获得所述被测函数被调用时的返回信息,
并根据所述中间帧中存储的所述调用信息在所述存储区中的存储地
址,将所述返回信息存储在所述存储区中,其中,所述调用信息和所
述返回信息存储在所述存储区中的同一个存储单元的两个子单元中。
2.根据权利要求1所述的方法,其特征在于,在所述为目标程序
分配中间帧之前,还包括:
对所述目标程序进行分析,获得所述目标程序的应用二进制接口
ABI规则;
根据所述被测函数的函数名,查找所述目标程序中的所述被测函
数,并根据所述被测函数的函数名和所述ABI规则对所述目标程序进
行分析,获得所述被测函数的参数调用规则;
根据所述ABI规则和所述被测函数的参数调用规则生成第一中间
汇编码和第二中间汇编码,并对所述被测函数进行二进制动态插桩;
其中,所述第一中间汇编码用于调用所述入口桩函数,所述第二中间
汇编码用于调用所述出口桩函数。
3.根据权利要求2所述的方法,其特征在于,所述为目标程序分
配中间帧,包括:
通过执行所述第一中间汇编码,为所述目标程序分配所述中间帧,
并将所述被测函数的返回地址、所述被测函数的参数表和指向所述参
数表的第一指针存储在所述中间帧中;
所述通过执行入口桩函数,获得所述被测函数被调用时的调用信
息,包括:
通过执行所述入口桩函数,将根据所述第一指针获得的所述被测
函数的参数表中的参数作为所述被测函数被调用时的调用信息。
4.根据权利要求2或3所述的方法,其特征在于,在所述通过执
行入口桩函数,获得所述被测函数被调用时的调用信息,将所述调用
信息存储在存储区中,并将所述调用信息在所述存储区中的存储地址
存储在所述中间帧中之后,还包括:
通过返回执行所述第一中间汇编码,将所述第一指针修改为所述
第二中间汇编码的入口地址;
通过执行所述被测函数,获得所述被测函数的返回值;
根据所述第二中间汇编码的入口地址,执行所述第二中间汇编码,
并通过执行所述第二中间汇编码,将所述返回值和指向所述返回值的
第二指针存储在所述中间帧中。
5.根据权利要求4所述的方法,其特征在于,所述通过执行出口
桩函数,获得所述被测函数被调用时的返回信息,包括:
通过执行所述出口桩函数,将根据所述第二指针获得的所述返回
值作为所述被测函数被调用时的返回信息。
6.根据权利要求1所述的方法,其特征在于,在所述为目标程序
分配中间帧之前,还包括:
对所述目标程序进行分析,获得所述被测函数的参数个数;
所述为所述目标程序分配中间帧,包括:
根据所述被测函数的参数个数,为所述目标程序分配存储空间大
于存储所述被测函数的参数所需空间的中间帧。
7.一种过程变量的存储装置,其特征在于,包括:
分配单元,用于为目标程序分配中间帧;...

【专利技术属性】
技术研发人员:谢江帆
申请(专利权)人:北京华为数字技术有限公司
类型:发明
国别省市:北京;11

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

1