链式哈希栈的优化方法及优化系统与流程

文档序号:18939992发布日期:2019-10-23 01:04阅读:204来源:国知局
链式哈希栈的优化方法及优化系统与流程

本发明涉及计算机技术领域,更具体地,涉及链式哈希栈的优化方法及优化系统。



背景技术:

目前,普通栈和链式哈希栈的栈帧布局如图1所示。在普通栈中,当程序运行时发生函数调用,会把返回地址(即ra)依次压入普通栈中;在函数返回时,从栈中依次取出最上层的返回地址于函数返回。由于被保存到普通栈中的返回地址可能被攻击者篡改,研究人员提出了一种链式哈希栈的新型防御手段。链式哈希栈在硬件上添加了top寄存器和key寄存器,top寄存器用来保存哈希值,key寄存器用来保存哈希函数的密钥,其中的密钥为常量。当调用函数时,将哈希值和返回地址依次压入链式哈希栈中。然后把密钥、哈希值和返回地址一起做哈希运算,运算结果用来更新top寄存器的值。在函数返回时,把哈希值和返回地址一同弹出链式哈希栈,并做哈希运算。运算结果与top寄存器中的哈希值做对比。如果不同,则抛出一个异常;如果相同,则用栈中的哈希值更新top寄存器,返回到主函数中。

其中,top寄存器中的哈希值可以用如下递推公式求得:

top[m]=hash(key,ra[m],top[m-1]),

其中,m为链式哈希栈中从下往上数第m个栈帧。

链式哈希栈的安全性极高,即使攻击者能任意读写内存地址空间,也无法绕过这种防御机制。然而,当哈希函数的运算周期增大时,它的性能损耗会急剧地加大。例如,当一次哈希运算需要80个时钟周期时,它的性能损耗大约为20%,限制了它的实用性。



技术实现要素:

为克服上述问题或者至少部分地解决上述问题,本发明实施例提供了一种链式哈希栈的优化方法及系统。

第一方面,本发明实施例提供了一种链式哈希栈的优化方法,包括:

s1,为链式哈希栈配置发射队列,所述发射队列中包括n个数据项,所述发射队列用于按顺序存储所述链式哈希栈中后入栈的n个栈帧中的返回地址和哈希值;

s2,当函数调用时,分别将所述发射队列中目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中,所述目标数据项为与所述链式哈希栈对应的ra寄存器中的目标返回地址对应的数据项;并用所述目标返回地址覆盖所述目标数据项内的初始返回地址;

s3,将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,对所述目标数据项内的所述目标返回地址、对应的哈希值以及预设密钥进行哈希运算,将哈希运算的第一结果作为所述所述目标返回地址的下一返回地址对应的哈希值存储至所述top寄存器中;

s4,当函数返回时,将所述目标数据项内的返回地址用于函数返回。

优选地,所述s4之后还包括:

用所述发射队列中与所述目标数据项内的返回地址对应的哈希值替换所述top寄存器中与所述目标返回地址对应的哈希值,并用所述链式哈希栈中存储的所述初始返回地址和所述初始哈希值分别覆盖所述目标数据项内的返回地址和哈希值。

优选地,所述s4之后还包括:

若判断获知所述目标数据项内的返回地址为所述链式哈希栈中存储的所述初始返回地址覆盖得到,则对所述目标数据项内的返回地址进行校验。

优选地,所述对所述目标数据项内的返回地址进行校验,具体包括:

将所述目标数据项内的返回地址、对应的哈希值以及所述预设密钥进行哈希运算,并将哈希运算的第二结果与所述top寄存器中存储的所述第一结果进行比较,若所述第二结果与所述第一结果不相等,则进行报错。

优选地,所述s3中将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,对所述目标数据项内的返回地址、哈希值以及预设密钥进行哈希运算,具体包括:

若判断获知s2后哈希模块处于空闲状态,则将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,通过所述哈希模块对所述目标数据项内的返回地址、哈希值以及预设密钥进行哈希运算;

否则,排队等待所述哈希模块进行哈希运算。

优选地,还包括:为所述哈希模块配置front指针和rear指针;

所述front指针用于指向所述发射队列中进行下一次哈希运算对应的数据项,所述rear指针用于指向所述发射队列中正在进行的哈希运算对应的数据项。

优选地,所述发射队列中还包括:状态信息列以及校验信息列;

所述状态信息列用于存储与每个数据项对应的、所述哈希模块的状态信息;

所述校验信息列用于存储与每个数据项对应的校验信息。

第二方面,本发明实施例中提供了一种链式哈希栈的优化系统,包括:发射队列配置模块、存储模块、哈希运算模块和返回模块。

发射队列配置模块用于为链式哈希栈配置发射队列,所述发射队列中包括n个数据项,所述发射队列用于按顺序存储所述链式哈希栈中后入栈的n个栈帧中的返回地址和哈希值;

存储模块用于当函数调用时,分别将所述发射队列中目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中,所述目标数据项为与所述链式哈希栈对应的ra寄存器中的目标返回地址对应的数据项;并用所述目标返回地址覆盖所述目标数据项内的初始返回地址;

哈希运算模块用于当所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内时,对所述目标数据项内的所述目标返回地址、对应的哈希值以及预设密钥进行哈希运算,将哈希运算的第一结果作为所述所述目标返回地址的下一返回地址对应的哈希值存储至所述top寄存器中;

返回模块用于当函数返回时,将所述目标数据项内的返回地址用于函数返回。

第三方面,本发明实施例中提供了一种电子设备,包括:

至少一个处理器、至少一个存储器、通信接口和总线;其中,

所述处理器、存储器、通信接口通过所述总线完成相互间的通信;

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令,以执行第一方面提供的链式哈希栈的优化方法。

第四方面,本发明实施例中提供了一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行第一方面提供的链式哈希栈的优化方法。

本发明实施例提供的一种链式哈希栈的优化方法及系统,通过为链式哈希栈配置发射队列,实现链式哈希栈上的返回地址的错位存储,原本函数返回必定经过的校验运算也大都被消除掉了,提高了链式哈希栈的运行速度,本发明实施例中使用较小的硬件开销,起到了很好的加速效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种链式哈希栈的优化方法的流程示意图;

图2为本发明实施例提供的一种链式哈希栈的优化方法中链式哈希栈正常存储与错位存储的对比原理图;

图3为本发明实施例提供的一种链式哈希栈的优化方法中当函数调用时的结构示意图;

图4为本发明实施例提供的一种链式哈希栈的优化方法中当函数返回时的结构示意图;

图5为本发明实施例提供的一种链式哈希栈的优化方法中发射队列的结构示意图;

图6为本发明实施例提供的一种链式哈希栈的优化方法中发射队列的结构示意图;

图7为本发明实施例提供的一种链式哈希栈的优化系统的结构示意图;

图8为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明实施例的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明实施例和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明实施例的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

在本发明实施例的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明实施例中的具体含义。

如图1所示,本发明实施例提供了一种链式哈希栈的优化方法,包括:

s1,为链式哈希栈配置发射队列,所述发射队列中包括n个数据项,所述发射队列用于按顺序存储所述链式哈希栈中后入栈的n个栈帧中的返回地址和哈希值;

s2,当函数调用时,分别将所述发射队列中目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中,所述目标数据项为与所述链式哈希栈对应的ra寄存器中的目标返回地址对应的数据项;并用所述目标返回地址覆盖所述目标数据项内的初始返回地址;

s3,将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,对所述目标数据项内的所述目标返回地址、对应的哈希值以及预设密钥进行哈希运算,将哈希运算的第一结果作为所述所述目标返回地址的下一返回地址对应的哈希值存储至所述top寄存器中;

s4,当函数返回时,将所述目标数据项内的返回地址用于函数返回。

具体地,本发明实施例中提供的链式哈希栈的优化方法,为链式哈希栈配置发射队列,具体可以是在硬件上为链式哈希栈配置一个发射队列。发射队列中包括n个数据项,分别用于按顺序存储链式哈希栈中后入栈的n个栈帧中的返回地址和哈希值。例如,假设链式哈希栈中包括m个栈帧,且m大于等于n,m个栈帧按入栈的先后顺序进行存储,第1个栈帧为最先入栈的栈帧,第m个栈帧为最后入栈的栈帧。则发射队列中按顺序存储链式哈希栈中第m-n至m-1这n个栈帧中的返回地址和哈希值。对于链式哈希栈,第i个栈帧中的返回地址为第i个返回地址,哈希值为第i-1个哈希值,其中1≤i≤m。

本发明实施例中,由于发射队列中的数据项的个数小于链式哈希栈中栈帧的个数,因此发射队列的作用实际上是实现错位存储。

如图2所示为链式哈希栈正常存储与错位存储的对比原理图,从图2中可以知晓,正常存储时,链式哈希栈上第m个栈帧存储第m个返回地址ra[m]和第m-1个哈希值hash[m-1]。然后,由ra[m]、预设密钥以及hash[m-1]进行哈希运算,将得到的结果作为hash[m]存储至链式哈希栈对应的top寄存器中。错位存储时,将链式哈希栈上第m个栈帧存储第m-n个返回地址ra[m-n]和第m-n-1个哈希值hash[m-n-1],而把第m个返回地址ra[m]以及第m-1个哈希值hash[m-1]存储在发射队列中。对于链式哈希栈上的第1个到第n个栈帧,保存的是随机值。然后,由发射队列中存储的ra[m]、预设密钥以及hash[m-1]进行哈希运算,将得到的结果作为hash[m]存储至链式哈希栈对应的top寄存器中。图2中rand表示随机数。

当函数调用时,首先将发射队列中目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中,目标数据项为与链式哈希栈对应的ra寄存器中的目标返回地址对应的数据项。其中,发射队列中的目标数据项是指发射队列中用于存储ra寄存器中的目标返回地址的数据项,即发射队列中最近一次存储返回地址的数据项的下个数据项。由于发射队列中的数据项是从队列底部到顶部再回到底部重新向顶部循环存储的,当发射队列中按顺序存储链式哈希栈中第m-n至m-1个这n个栈帧中的返回地址和哈希值后,设ra寄存器中的目标返回地址为ra[m],对应的哈希值为hash[m-1],则目标数据项为用于存储ra[m]和hash[m-1]的数据项。若发射队列要存储ra[m]和hash[m-1],则需采用的目标数据项应为发射队列中的第1个数据项,即当前存储链式哈希栈中第m-n个栈帧的数据项,此时目标数据项中存储的初始返回地址为ra[m-n],初始哈希值为hash[m-n-1]。

如图3所示,当函数调用时,首先将发射队列中目标数据项1内的初始返回地址ra[m-n]和初始哈希值hash[m-n-1]存储至链式哈希栈中。然后,用ra寄存器中的目标返回地址ra[m]覆盖目标数据项内的初始返回地址ra[m-n]。

然后,将链式哈希栈对应的top寄存器中存储的、与ra寄存器中的目标返回地址ra[m]对应的哈希值hash[m-1]存储至目标数据项1内,对此时的目标数据项1内的返回地址ra[m]和哈希值hash[m-1]以及预设密钥进行哈希运算,并将哈希运算得到的第一结果hash[m]作为函数中的返回地址ra[m]的下一返回地址对应的哈希值存储至top寄存器中。其中,预设密钥可以根据需要设置,本发明实施例中对此不作具体限定。

最后,当函数返回时,将目标数据项1内的返回地址ra[m]用于函数返回,即将目标数据项1内的返回地址ra[m]存储至链式哈希栈对应的ra寄存器中。

本发明实施例中提供的链式哈希栈的优化方法,通过为链式哈希栈配置发射队列,实现链式哈希栈上的返回地址的错位存储,原本函数返回必定经过的校验运算也大都被消除掉了,提高了链式哈希栈的运行速度,本发明实施例中使用较小的硬件开销,起到了很好的加速效果。

在上述实施例的基础上,本发明实施例中提供的链式哈希栈的优化方法,所述s4之后还包括:

用所述发射队列中与所述目标数据项内的返回地址对应的哈希值替换所述top寄存器中与所述目标返回地址对应的哈希值,并用所述链式哈希栈中存储的所述初始返回地址和所述初始哈希值分别覆盖所述目标数据项内的返回地址和哈希值。

具体地,如图4所示,本发明实施例中在函数返回时设目标数据项内的返回地址ra[m],将目标数据项1内的返回地址ra[m]存储至链式哈希栈对应的ra寄存器中之后,用发射队列中与目标数据项1内的返回地址ra[m]对应的哈希值hash[m-1]替换top寄存器中与目标返回地址对应的哈希值hash[m],并用链式哈希栈中存储的初始返回地址ra[m-n]和初始哈希值hash[m-n-1]分别覆盖目标数据项1内的返回地址和哈希值。

也就是说,本发明实施例中的发射队列中目标数据项内用于函数返回的返回地址可以有两个来源,一个来源是直接从链式哈希栈对应的ra寄存器中提取并存储至发射队列中的,一个来源是从链式哈希栈提取并覆盖得到的。

在上述实施例的基础上,本发明实施例中提供的链式哈希栈的优化方法,所述s4之后还包括:

若判断获知所述目标数据项内的返回地址为所述链式哈希栈中存储的所述初始返回地址覆盖得到,则对所述目标数据项内的返回地址进行校验。

具体地,本发明实施例中,当目标数据项内用于函数返回的返回函数来源于ra寄存器,则可以认为返回地址是未被篡改的;否则,目标数据项内用于函数返回的返回地址来源于链式哈希栈时。则返回地址有可能被篡改,需要对返回地址进行校验,以验证返回地址的准确性。

在上述实施例的基础上,本发明实施例中提供的链式哈希栈的优化方法,所述对所述目标数据项内的返回地址进行校验,具体包括:

将所述目标数据项内的返回地址、对应的哈希值以及所述预设密钥进行哈希运算,并将哈希运算的第二结果与所述top寄存器中存储的所述第一结果进行比较,若所述第二结果与所述第一结果不相等,则进行报错。

具体地,本发明实施例中第一结果是通过目标返回地址、对应的哈希值以及预设密钥进行哈希运算得到,而目标返回地址是来源于ra寄存器,则可以认为目标返回地址是未被篡改的。因此,通过将第二结果与第一结果进行比较,如果第二结果与第一结果相等,则证明目标数据项内的返回地址未被篡改,如果第二结果与第一结果不相等,则证明目标数据项内的返回地址已被篡改,需要进行报错。

在上述实施例的基础上,本发明实施例中提供的链式哈希栈的优化方法,所述s3中将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,对所述目标数据项内的返回地址、哈希值以及预设密钥进行哈希运算,具体包括:

若判断获知s2后哈希模块处于空闲状态,则将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,通过所述哈希模块对所述目标数据项内的返回地址、哈希值以及预设密钥进行哈希运算;

否则,排队等待所述哈希模块进行哈希运算。

具体地,本发明实施例中采用哈希模块实现哈希运算,哈希模块的状态可以包括空闲状态和计算状态。在s3中需要进行哈希运算时,可以先判断s2后哈希模块处于何种状态,如果哈希模块处于空闲状态,则将链式哈希栈对应的top寄存器中存储的、与目标返回地址对应的哈希值存储至目标数据项内,通过哈希模块对目标数据项内的返回地址、哈希值以及预设密钥进行哈希运算;如果哈希模块处于计算状态,即此时哈希模块被占用,无法进行哈希运算,则需进行排队等待,直至哈希模块处于空闲状态再通过哈希模块进行哈希运算。

需要说明的是,由于哈希模块具有两种状态,因此s2中可以先将发射队列中目标数据项内的初始返回地址存储至链式哈希栈中,并用目标返回地址覆盖目标数据项内的初始返回地址,将目标数据项内的初始哈希值存储至链式哈希栈中,然后再看哈希模块是处于何种状态,当哈希模块处于空闲状态,则再将链式哈希栈对应的top寄存器中存储的、与目标返回地址对应的哈希值存储至目标数据项内。

在上述实施例的基础上,本发明实施例中提供的链式哈希栈的优化方法,还包括:为所述哈希模块配置front指针和rear指针;

所述front指针用于指向所述发射队列中进行下一次哈希运算对应的数据项,所述rear指针用于指向所述发射队列中正在进行的哈希运算对应的数据项。

具体地,如图5所示,发射队列中包括返回地址列ra和哈希值列hash,返回地址列ra用于按列存储每个数据项内的返回地址,哈希值列hash用于按列存储每个数据项内与返回地址对应的哈希值。front指针用于指向发射队列中进行下一次哈希运算要存储的位置,即对应的数据项,从队列底部到顶部,再回到底部,重新从底部到顶部,循环推进。rear指针向当前正在进行哈希运算的数据项。需要说明的是,当发射队列中的哈希运算都算完时,rear指针应当和front指针指向同一位置。

在上述实施例的基础上,本发明实施例中提供的链式哈希栈的优化方法,所述发射队列中还包括:状态信息列以及校验信息列;

所述状态信息列用于存储与每个数据项对应的、所述哈希模块的状态信息;

所述校验信息列用于存储与每个数据项对应的校验信息。

具体地,如图6所示,发射队列中还包括:状态信息列q和校验信息列cr,状态信息列q用于存储与每个数据项对应的、哈希模块的状态信息;校验信息列cr用于存储与每个数据项对应的校验信息。其中,q中的每个状态信息均为一个比特位,初始化为0,表示此时哈希模块的状态信息为空闲状态,若状态信息取值为1,则表示哈希模块的状态为计算状态,需要该数据项排队等待哈希模块处于空闲状态进行哈希运算。cr中的每个校验信息均为一个比特位,初始化为0,表示该数据项在函数返回时是否需要进行校验。

在函数调用时,首先将发射队列中front指向的目标数据项中的初始返回地址和初始哈希值分别存储至链式哈希栈中,然后用ra寄存器内的目标返回地址覆盖所述目标数据项内的初始返回地址;并将目标数据项对应的q值和cr值置为1,front指向下一个数据项。如果此时哈希模块的状态是空闲状态,则将链式哈希栈对应的top寄存器中存储的、与目标返回地址对应的哈希值存储至目标数据项内,开始进行哈希运算;如果此时哈希模块忙碌(即前面的哈希运算还没结束时),则排队等待计算。每次哈希运算结束时,把哈希运算得到的新的哈希值写入top寄存器,然后查询下一个数据项是否处于排队状态,如果下一项在排队等待,rear就指向下一项,开始下一个数据项的哈希运算。

也就是说,假设有连续的函数调用,第一次函数调用的哈希计算还没进行完,后续的函数调用都进来排队了,那么它们都:

1)把目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中;

2)用所述目标返回地址覆盖所述目标数据项内的初始返回地址;

不同之处在于,第一次函数调用时哈希模块是空闲的,top寄存器的值可以直接覆盖所述目标数据项的初始哈希值,然后开始计算。算完后更新top寄存器。

轮到第二个哈希计算时,才把top寄存器中新的值覆盖所述目标数据项的初始哈希值,然后开始计算。

即:函数调用时,轮到发射队列中哪个数据项进行哈希运算,则对应的那个数据项里的哈希值才会更新,然后开始进行哈希运算。

在函数返回时,根据目标数据项对应的cr值来决定是否需要进行校验。由于front指向的是下一次函数调用要覆盖的那一个数据项,因此可以根据cr[front-1]来判断。

当cr[front-1]为1时,代表目标数据项的返回地址是函数调用时保存到发射队列中的,不会被篡改,因此不需要校验。此时取出发射队列的ra[front-1]用于函数返回,而将链式哈希栈中取出的返回地址覆盖ra[front-1],front减1。如果目标数据项对应的q值为1,代表它处于排队运算,而函数已经要返回了,也就不需要排队了,q值置为0。特别地,如果此时正在哈希运算的就是该目标数据项,则终止该运算,并将该项的哈希值赋给top寄存器。该栈帧取出的哈希值也覆盖hash[front-1]。

当cr[front-1]为0时,代表发射队列中目标数据项的返回地址是从链式哈希栈中取出来的,可能被篡改过了,因此需要校验。目标数据项的返回地址可以暂时先被用于函数返回,但同时该返回地址和哈希值进行哈希运算,结果与top寄存器内存储的与该返回地址对应的哈希值进行对比,如果相等则没有被篡改,否则报错。由于这两个待校验的值已经被送入哈希模块进行运算了,因此就从链式哈希栈中读出的返回地址和哈希值就可以覆盖它们,cr值仍然为0,但q值置为1,代表目标数据项正在进行运算。

当发射队列中某个数据项对应的cr值为0,表示发射队列中的返回地址未经校验。但在函数调用时,它依然可以保存到链式哈希栈中。这是因为它还没有被用于函数返回。

正常存储中,任意两次相邻的哈希运算都可能产生冲突导致流水线的停顿。而在错位存储中,对于函数调用时的哈希运算,只有当发射队列的排队数量已满或者此时正在进行函数返回时的校验运算时,才需要停顿流水线。而正常存储可以通过增加发射的项数来解决。因为相邻的函数调用之间也有时间间隔。根据实验结果,认为8项已经够了。在函数返回时,如果使用的是cr值为1的返回地址(即从未保存到栈中过的),则不需要校验,也不管是否在排队,都可以直接返回不需要停顿;如果使用的是cr值为0的返回地址,则需要校验,则有可能与后续的哈希运算产生冲突。

但总的来说,由于发射队列的存在,使得排队计算得以实现,原本函数返回必定校验的运算也大都被消除掉了。本发明实施例中使用了较小的硬件开销,起到了很好的加速效果。

如图7所示,在上述实施例的基础上,本发明实施例中提供了一种链式哈希栈的优化系统,包括:发射队列配置模块71、存储模块72、哈希运算模块73和返回模块74。其中,

发射队列配置模块71用于为链式哈希栈配置发射队列,所述发射队列中包括n个数据项,所述发射队列用于按顺序存储所述链式哈希栈中后入栈的n个栈帧中的返回地址和哈希值;

存储模块72用于当函数调用时,分别将所述发射队列中目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中,所述目标数据项为与所述链式哈希栈对应的ra寄存器中的目标返回地址对应的数据项;并用所述目标返回地址覆盖所述目标数据项内的初始返回地址;

哈希运算模块73用于当所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内时,对所述目标数据项内的所述目标返回地址、对应的哈希值以及预设密钥进行哈希运算,将哈希运算的第一结果作为所述所述目标返回地址的下一返回地址对应的哈希值存储至所述top寄存器中;

返回模块74用于当函数返回时,将所述目标数据项内的返回地址用于函数返回。

具体地,本发明实施例中提供的链式哈希栈的优化系统中各模块的作用与上述方法类实施例中各步骤的操作流程是一一对应的,实现的效果也是一致的,本发明实施例中对此不再赘述。

如图8所示,在上述实施例的基础上,本发明实施例中还提供了一种电子设备,包括:处理器(processor)801、存储器(memory)802、通信接口(communicationsinterface)803和总线804;其中,

所述处理器801、存储器802、通信接口803通过总线804完成相互间的通信。所述存储器802存储有可被所述处理器801执行的程序指令,处理器801用于调用存储器802中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:s1,为链式哈希栈配置发射队列,所述发射队列中包括n个数据项,所述发射队列用于按顺序存储所述链式哈希栈中后入栈的n个栈帧中的返回地址和哈希值;s2,当函数调用时,分别将所述发射队列中目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中,所述目标数据项为与所述链式哈希栈对应的ra寄存器中的目标返回地址对应的数据项;并用所述目标返回地址覆盖所述目标数据项内的初始返回地址;s3,将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,对所述目标数据项内的所述目标返回地址、对应的哈希值以及预设密钥进行哈希运算,将哈希运算的第一结果作为所述所述目标返回地址的下一返回地址对应的哈希值存储至所述top寄存器中;s4,当函数返回时,将所述目标数据项内的返回地址用于函数返回。

存储器802中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

在上述实施例的基础上,本发明实施例中提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:s1,为链式哈希栈配置发射队列,所述发射队列中包括n个数据项,所述发射队列用于按顺序存储所述链式哈希栈中后入栈的n个栈帧中的返回地址和哈希值;s2,当函数调用时,分别将所述发射队列中目标数据项内的初始返回地址和初始哈希值存储至所述链式哈希栈中,所述目标数据项为与所述链式哈希栈对应的ra寄存器中的目标返回地址对应的数据项;并用所述目标返回地址覆盖所述目标数据项内的初始返回地址;s3,将所述链式哈希栈对应的top寄存器中存储的、与所述目标返回地址对应的哈希值存储至所述目标数据项内,对所述目标数据项内的所述目标返回地址、对应的哈希值以及预设密钥进行哈希运算,将哈希运算的第一结果作为所述所述目标返回地址的下一返回地址对应的哈希值存储至所述top寄存器中;s4,当函数返回时,将所述目标数据项内的返回地址用于函数返回。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1