栈溢出位置的检测方法及装置制造方法及图纸

技术编号:11607842 阅读:94 留言:0更新日期:2015-06-17 06:36
本公开是关于栈溢出位置的检测方法及装置,用以实现快捷简便地检测栈溢出位置。该方法包括:在执行待测函数之前,确定程序中随机初始化数字的初始值,其中,所述随机初始化数字处于所述程序的数组缓冲区的最后一个元素的前一个字节对齐地址处;执行所述待测函数,并在执行所述待测函数之后,获取所述随机初始化数字的当前值;判断所述当前值与所述初始值是否相同;当所述当前值与所述初始值相同时,确定所述待测函数未发生栈溢出;当所述当前值与所述初始值不相同时,确定所述待测函数发生栈溢出。该方法实现了快捷简便地检测栈溢出位置。

【技术实现步骤摘要】

本公开涉及终端设备开发
,尤其涉及栈溢出位置的检测方法及装置
技术介绍
随着智能手机的普及,近几年掀起了移动开发的热潮,特别是android系统的开 源,使得各个厂商的开发手机系统的成本变得很低,同时也引来的越来越多的开发人员进 入到这一嵌入式领域开发平台,嵌入式领域主要是基于arm架构的嵌入式开发。arm编程以 及调试技术已经越来越成为当今移动开发领域的核心竞争力。快速地开发以及调试程序是 每个移动开发者迫切想要掌握的技能。 栈溢出问题在程序开发中十分常见,然而,编程人员一直都没有很好的解决该问 题的方法,在arm架构编程这个当下最为热门的领域更是如此。
技术实现思路
为克服相关技术中存在的问题,本公开实施例提供栈溢出位置的检测方法及装 置,用以实现快捷简便地检测栈溢出位置。 根据本公开实施例的第一方面,提供一种栈溢出位置的检测方法,包括: 在执行待测函数之前,确定程序中随机初始化数字的初始值,其中,所述随机初始 化数字处于所述程序的数组缓冲区的最后一个元素的前一个字节对齐地址处,所述待测函 数属于所述程序; 执行所述待测函数,并在执行所述待测函数之后,获取所述随机初始化数字的当 前值; 判断所述当前值与所述初始值是否相同; 当所述当前值与所述初始值相同时,确定所述待测函数未发生栈溢出;当所述当 前值与所述初始值不相同时,确定所述待测函数发生栈溢出。 在一个实施例中,所述确定程序中随机初始化数字的初始值之前,所述方法还包 括:将所述程序中的当前层代码中的任一函数作为所述待测函数; 所述确定所述待测函数未发生栈溢出之后,所述方法还包括:当当前层代码中的 每一个函数均未发生栈溢出时,将下一层代码中的任一函数作为所述待测函数,并利用所 述方法对该下一层代码中的待测函数进行栈溢出位置的检测。 在一个实施例中,所述任一函数包括具有局部变量和/或全局变量的函数。 在一个实施例中,所述确定程序中随机初始化数字的初始值之前,所述方法还包 括:当发生栈溢出的函数中包括子函数时,将该发生栈溢出的函数中的任一子函数作为所 述待测函数。 在一个实施例中,所述任一子函数包括具有局部变量和/或全局变量的子函数。 根据本公开实施例的第二方面,提供一种栈溢出位置的检测装置,包括: 第一确定模块,用于在执行待测函数之前,确定程序中随机初始化数字的初始值, 其中,所述随机初始化数字处于所述程序的数组缓冲区的最后一个元素的前一个字节对齐 地址处,所述待测函数属于所述程序; 函数执行模块,用于执行所述待测函数,并在执行所述待测函数之后,获取所述随 机初始化数字的当前值; 判断模块,用于判断所述当前值与所述初始值是否相同; 第二确定模块,用于当所述当前值与所述初始值相同时,确定所述待测函数未发 生栈溢出;当所述当前值与所述初始值不相同时,确定所述待测函数发生栈溢出。 在一个实施例中,所述装置还包括: 第一选择模块,用于在所述第一确定模块确定程序中随机初始化数字的初始值之 前,将所述程序中的当前层代码中的任一函数作为所述待测函数; 第二选择模块,用于在所述第二确定模块确定所述待测函数未发生栈溢出之后, 当当前层代码中的每一个函数均未发生栈溢出时,将下一层代码中的任一函数作为所述待 测函数,并利用所述方法对该下一层代码中的待测函数进行栈溢出位置的检测。 在一个实施例中,所述任一函数包括具有局部变量和/或全局变量的函数。 在一个实施例中,所述装置还包括: 第三选择模块,用于在所述第一确定模块确定程序中随机初始化数字的初始值之 前,当发生栈溢出的函数中包括子函数时,将该发生栈溢出的函数中的任一子函数作为所 述待测函数。 在一个实施例中,所述任一子函数包括具有局部变量和/或全局变量的子函数。 根据本公开实施例的第三方面,提供一种栈溢出位置的检测装置,包括: 处理器; 用于存储处理器可执行指令的存储器; 其中,所述处理器被配置为: 在执行待测函数之前,确定程序中随机初始化数字的初始值,其中,所述随机初始 化数字处于所述程序的数组缓冲区的最后一个元素的前一个字节对齐地址处,所述待测函 数属于所述程序; 执行所述待测函数,并在执行所述待测函数之后,获取所述随机初始化数字的当 前值; 判断所述当前值与所述初始值是否相同; 当所述当前值与所述初始值相同时,确定所述待测函数未发生栈溢出;当所述当 前值与所述初始值不相同时,确定所述待测函数发生栈溢出。 本公开的实施例提供的技术方案可以包括以下有益效果: 上述技术方案,通过比对函数执行前后保存于预设位置处的随机初始化数字的 值,就能确定出栈溢出位置,实现了快捷简便地检测栈溢出的位置,方便程序开发人员进行 进程调试。 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不 能限制本公开。【附图说明】 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施 例,并与说明书一起用于解释本公开的原理。 图1是根据一示例性实施例示出的一种栈溢出位置的检测方法的流程图。 图2是根据一当前第1页1 2 本文档来自技高网...
栈溢出位置的检测方法及装置

【技术保护点】
一种栈溢出位置的检测方法,其特征在于,包括:在执行待测函数之前,确定程序中随机初始化数字的初始值,其中,所述随机初始化数字处于所述程序的数组缓冲区的最后一个元素的前一个字节对齐地址处,所述待测函数属于所述程序;执行所述待测函数,并在执行所述待测函数之后,获取所述随机初始化数字的当前值;判断所述当前值与所述初始值是否相同;当所述当前值与所述初始值相同时,确定所述待测函数未发生栈溢出;当所述当前值与所述初始值不相同时,确定所述待测函数发生栈溢出。

【技术特征摘要】

【专利技术属性】
技术研发人员:李明浩甘晓霖王舒捷
申请(专利权)人:小米科技有限责任公司
类型:发明
国别省市:北京;11

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

1