【技术实现步骤摘要】
栈溢出保护方法、存储介质及芯片
[0001]本专利技术涉及计算机
,具体涉及一种栈溢出保护方法、存储介质及芯片。
技术介绍
[0002]许多计算系统在运行程序过程中,由于内存管理并不够可靠,经常遇到栈溢出现象,容易导致计算系统运行出现异常,因此,相关技术通过定时监测堆栈寄存器的指针地址,以监测是否会发生栈溢出问题。但是,由于相关技术采用的监测方式是定时监测方式,因此,相关技术并未能够有效地及时发现堆栈寄存器是否会出现栈溢出问题。
技术实现思路
[0003]本专利技术实施例的一个目的旨在提供一种栈溢出保护方法、存储介质及芯片,旨在改善相关技术未能够有效及时地监测栈溢出的技术问题。
[0004]在第一方面,本专利技术实施例提供一种栈溢出保护方法,包括:
[0005]确定初始指针地址;
[0006]根据所述入栈操作所需的指针偏移量及所述初始指针地址计算入栈地址;
[0007]根据所述入栈地址及预设的栈底地址生成栈溢出判断结果;
[0008]根据所述栈溢出判断结果执行栈溢出保护操作。
[0009]可选地,所述栈溢出判断结果包括栈溢出结果和栈未溢出结果,所述根据所述入栈地址及预设的栈底地址生成栈溢出判断结果包括:
[0010]判断所述入栈地址是否大于所述栈底地址;
[0011]若小于或等于,则生成栈溢出结果;
[0012]若大于,则生成栈未溢出结果。
[0013]可选地,所述根据所述栈溢出判断结果执行栈溢出保护操作包括: />[0014]若所述栈溢出判断结果为栈溢出结果,则根据已请求的异常存储区执行栈溢出保护操作,所述异常存储区用于存储所述入栈操作所需存储的数据。
[0015]可选地,所述根据已请求的异常存储区执行栈溢出保护操作包括:
[0016]确定所述异常存储区的目标指针地址;
[0017]根据所述目标指针地址,将所述入栈操作所需存储的数据存储在所述异常存储区内。
[0018]可选地,所述确定所述异常存储区的目标指针地址包括:
[0019]确定所述异常存储区的起始存储地址;
[0020]访问程序计数器的机器码以遍历出第一指针转移指令;
[0021]解析所述第一指针转移指令,得到第一地址偏移量;
[0022]根据所述起始存储地址及所述第一地址偏移量确定目标指针地址。
[0023]可选地,所述根据已请求的异常存储区执行栈溢出保护操作还包括:
[0024]检测到溢出退出操作时,执行指针还原操作以将当前指针地址还原成所述初始指
针地址。
[0025]可选地,所述执行指针还原操作以将当前指针地址还原成所述初始指针地址包括:
[0026]访问程序计数器的机器码以遍历出第二指针转移指令;
[0027]解析所述第二指针转移指令,得到第二地址偏移量;
[0028]根据所述目标指针地址及所述第二地址偏移量确定起始存储地址;
[0029]根据所述起始存储地址,将当前指针地址还原成所述初始指针地址。
[0030]可选地,所述异常存储区包括用于存储所述初始指针地址的指定存储单元,所述指定存储单元的存储地址高于所述起始存储地址,所述根据所述起始存储地址,将当前指针地址还原成所述初始指针地址包括:
[0031]根据所述起始存储地址确定所述指定存储单元的存储地址;
[0032]根据所述指定存储单元的存储地址,读取所述指定存储单元以得到所述初始指针地址;
[0033]根据所述初始指针地址更新所述当前指针地址。
[0034]在第二方面,本专利技术实施例提供一种存储介质,存储有计算机可执行指令,所述计算机可执行指令用于使电子设备执行上述的栈溢出保护方法。
[0035]在第三方面,本专利技术实施例提供一种芯片,包括:
[0036]至少一个处理器;以及,
[0037]与所述至少一个处理器通信连接的存储器;其中,
[0038]所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的栈溢出保护方法。
[0039]在本专利技术实施例提供的栈溢出保护方法中,确定初始指针地址,根据入栈操作所需的指针偏移量及初始指针地址计算入栈地址,根据入栈地址及预设的栈底地址生成栈溢出判断结果,根据栈溢出判断结果执行栈溢出保护操作,因此,本实施例在每次执行入栈操作时,能够及时有效地监测是否发生栈溢出现象,并根据栈溢出判断结果执行栈溢出保护操作,如此能够在发生栈溢出时也能够有效地存储数据,以维持芯片的正常运行,从而能够提高芯片运行的鲁棒性和实时性。
附图说明
[0040]一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
[0041]图1为本专利技术实施例提供的一种栈溢出保护方法的流程示意图;
[0042]图2为本专利技术实施例提供的一种堆栈寄存器的存储区的第一种示意图;
[0043]图3为本专利技术实施例提供的一种堆栈寄存器的存储区的第二种示意图;
[0044]图4为本专利技术实施例提供的一种异常存储区的示意图;
[0045]图5为本专利技术实施例提供的一种芯片的电路结构示意图。
具体实施方式
[0046]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0047]需要说明的是,如果不冲突,本专利技术实施例中的各个特征可以相互结合,均在本专利技术的保护范围之内。另外,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。再者,本专利技术所采用的“第一”、“第二”、“第三”等字样并不对数据和执行次序进行限定,仅是对功能和作用基本相同的相同项或相似项进行区分。
[0048]本专利技术实施例提供一种栈溢出保护方法。请参阅图1,栈溢出保护方法包括:
[0049]S11:确定初始指针地址。
[0050]本步骤中,初始指针地址为入栈前的当前指针地址。举例而言,请参阅图2,当前指针地址为0X10032,此时,芯片执行中断函数,此次需要执行入栈操作,因此,初始指针地址为当前指针地址“0X10032”。
[0051]在一些实施例中,确定初始指针地址包括:启动芯片的堆栈异常监测程序监测堆栈寄存器以获得初始指针地址。芯片内置有堆栈异常监测程序watch_point,控制堆栈异常监测程序watch_point指向堆栈寄存器。
[0052]S12:根据入本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种栈溢出保护方法,其特征在于,包括:确定初始指针地址;根据所述入栈操作所需的指针偏移量及所述初始指针地址计算入栈地址;根据所述入栈地址及预设的栈底地址生成栈溢出判断结果;根据所述栈溢出判断结果执行栈溢出保护操作。2.根据权利要求1所述的方法,其特征在于,所述栈溢出判断结果包括栈溢出结果和栈未溢出结果,所述根据所述入栈地址及预设的栈底地址生成栈溢出判断结果包括:判断所述入栈地址是否大于所述栈底地址;若小于或等于,则生成栈溢出结果;若大于,则生成栈未溢出结果。3.根据权利要求1所述的方法,其特征在于,所述根据所述栈溢出判断结果执行栈溢出保护操作包括:若所述栈溢出判断结果为栈溢出结果,则根据已请求的异常存储区执行栈溢出保护操作,所述异常存储区用于存储所述入栈操作所需存储的数据。4.根据权利要求3所述的方法,其特征在于,所述根据已请求的异常存储区执行栈溢出保护操作包括:确定所述异常存储区的目标指针地址;根据所述目标指针地址,将所述入栈操作所需存储的数据存储在所述异常存储区内。5.根据权利要求4所述的方法,其特征在于,所述确定所述异常存储区的目标指针地址包括:确定所述异常存储区的起始存储地址;访问程序计数器的机器码以遍历出第一指针转移指令;解析所述第一指针转移指令,得到第一地址偏移量;根据所述起始存储地址及所述第一地址偏移量确定目标指针地址。6.根据权利要求4所述的方法,其特征在于,所述根据已请求的异常存储区执...
【专利技术属性】
技术研发人员:朱浩,
申请(专利权)人:深圳市中科蓝讯科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。