一种实现压栈和弹栈的方法和装置的制造方法_3

文档序号:9921833阅读:来源:国知局
一对象引用计算第一校验值,将第一校验值置于第一对象引用之前或之后,将合并后的数据按序写入到栈中;接收到通知消息,按照先进后出的原则从栈中读取数据;
[0086]获取读取的数据的前M位得到第二校验值,获取读取的数据的后N位得到第二对象引用;或者,获取读取的数据的后M位得到第二校验值,获取读取的数据的前N位得到第二对象引用;其中,M位第二校验值的位数,N为第二对象引用的位数;
[0087]根据获得的第二对象引用计算第三校验值,判断出计算得到的第三校验值和获得的第二校验值相同,返回获得的第二对象引用。
[0088]需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本发明的保护范围之内。
【主权项】
1.一种实现压栈和弹栈的方法,其特征在于,包括: 接收到压桟指令push Reference时,根据压桟指令push Reference中的第一对象引用计算第一校验值,对第一校验值和第一对象引用进行合并,将合并后的数据按序写入到栈中; 接收到弹桟指令pop Reference时,按照先进后出的原则从桟中读取数据,获取读取的数据中的第二校验值和第二对象引用,根据获得的第二对象引用计算第三校验值,判断出计算得到的第三校验值和获得的第二校验值相同,返回获得的第二对象引用。2.根据权利要求1所述的方法,其特征在于,当判断出所述第三校验值和所述第二校验值不相同时,该方法还包括:抛出异常。3.根据权利要求1或2所述的方法,其特征在于,当接收到压桟指令pushshort或pushint时,该方法还包括: 将接收到的压桟指令push short或push int中的数据按序写入到所述桟中。4.根据权利要求1或2所述的方法,其特征在于,所述根据压桟指令pushReference中的第一对象引用计算第一校验值包括: 将所述第一对象引用进行按位取反得到所述第一校验值; 所述根据获得的第二对象引用计算第三校验值包括: 将所述第二对象引用进行按位取反得到所述第三校验值。5.根据权利要求1或2所述的方法,其特征在于,所述根据压桟指令pushReference中的第一对象引用计算第一校验值包括: 将所述第一对象引用按位与预设值进行预设操作得到所述第一校验值; 所述根据获得的第二对象引用计算第三校验值包括: 将所述第二对象引用按位与预设值进行预设操作得到所述第三校验值。6.根据权利要求1或2所述的方法,其特征在于, 所述对第一校验值和第一对象引用进行合并包括:将所述第一校验值置于所述第一对象引用之前或之后; 所述获取读取的数据中的第二校验值和第二对象引用包括: 获取所述读取的数据的前M位得到所述第二校验值,获取所述读取的数据的后N位得到所述第二对象引用;或者, 获取所述读取的数据的后M位得到所述第二校验值,获取所述读取的数据的前N位得到所述第二对象引用; 其中,M为所述第二校验值的位数,N为所述第二对象引用的位数。7.一种实现压栈和弹栈的装置,其特征在于,至少包括: 接收模块,用于接收到压桟指令push Reference时,向处理模块发送压桟指令pushReference;接收到弹桟指令pop Reference时,向处理模块发送通知消息; 处理模块,用于接收到压桟指令push Reference,根据压桟指令pushReference中的第一对象引用计算第一校验值,对第一校验值和第一对象引用进行合并,将合并后的数据按序写入到栈中;接收到通知消息,按照先进后出的原则从栈中读取数据,获取读取的数据中的第二校验值和第二对象引用,根据获得的第二对象引用计算第三校验值,判断出计算得到的第三校验值和获得的第二校验值相同,返回获得的第二对象引用。8.根据权利要求7所述的装置,其特征在于,所述处理模块还用于: 判断出所述第三校验值和所述第二校验值不相同,抛出异常。9.根据权利要求7或8所述的装置,其特征在于,所述接收模块还用于: 当接收到压桟指令push short或push int时,向所述处理模块发送压桟指令pushshort或push int; 所述处理模块还用于: 接收到所述压桟指令push short或push int,将所述压桟指令push short或push int中的数据按序写入到所述栈中。10.根据权利要求7或8所述的装置,其特征在于,所述处理模块具体用于: 接收到所述压桟指令push Reference,将所述第一对象引用进行按位取反得到所述第一校验值,对所述第一校验值和所述第一对象引用进行合并,将所述合并后的数据按序写入到栈中;接收到所述通知消息,按照先进后出的原则从所述栈中读取数据,获取所述读取的数据中的第二校验值和第二对象引用,将所述第二对象引用进行按位取反得到所述第三校验值,判断出计算得到的第三校验值和获得的第二校验值相同,返回获得的第二对象引用。11.根据权利要求7或8所述的装置,其特征在于,所述处理模块具体用于: 接收到所述压栈指令push Reference,将所述第一对象引用按位与预设值进行预设操作得到所述第一校验值,对所述第一校验值和所述第一对象引用进行合并,将所述合并后的数据按序写入到栈中;接收到所述通知消息,按照先进后出的原则从所述栈中读取数据,获取所述读取的数据中的第二校验值和第二对象引用,将所述第二对象引用按位与预设值进行预设操作得到所述第三校验值,判断出计算得到的第三校验值和获得的第二校验值相同,返回获得的第二对象引用。12.根据权利要求7或8所述的装置,其特征在于,所述处理模块具体用于: 接收到所述压桟指令push Reference,根据所述压桟指令push Reference中的第一对象引用计算所述第一校验值,将所述第一校验值置于所述第一对象引用之前或之后,将所述合并后的数据按序写入到栈中;接收到所述通知消息,按照先进后出的原则从所述栈中读取数据; 获取所述读取的数据的前M位得到所述第二校验值,获取所述读取的数据的后N位得到所述第二对象引用;或者,获取所述读取的数据的后M位得到所述第二校验值,获取所述读取的数据的前N位得到所述第二对象引用;其中,M位所述第二校验值的位数,N为所述第二对象引用的位数; 根据获得的第二对象引用计算第三校验值,判断出计算得到的第三校验值和获得的第二校验值相同,返回获得的第二对象引用。
【专利摘要】本发明公开了一种实现压栈和弹栈的方法和装置,包括:接收到压栈指令push Reference时,根据压栈指令push Reference中的第一对象引用计算第一校验值,对第一校验值和第一对象引用进行合并,将合并后的数据按序写入到栈中;接收到弹栈指令pop Reference时,按照先进后出的原则从栈中读取数据,获取读取的数据中的第二校验值和第二对象引用,根据获得的第二对象引用计算第三校验值,判断出计算得到的第三校验值和获得的第二校验值相同,返回获得的第二对象引用。通过本发明的方案,接收到弹栈指令pop Reference时,通过比较第二校验值和第三校验值,在第二校验值和第三校验值相同时才返回第二对象引用,从而攻击者无法使用push short或push int来对对象引用对应的对象的内容进行操作,提高了安全性。
【IPC分类】G06F9/30
【公开号】CN105700851
【申请号】CN201610012520
【发明人】肖洪琨, 熊燕萍
【申请人】大唐微电子技术有限公司, 大唐半导体设计有限公司
【公开日】2016年6月22日
【申请日】2016年1月8日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1