[发明专利]堆栈的保护方法及装置有效
申请号: | 201610058946.2 | 申请日: | 2016-01-28 |
公开(公告)号: | CN107015904B | 公开(公告)日: | 2022-04-19 |
发明(设计)人: | 刘雪峰;缪红保 | 申请(专利权)人: | 中兴通讯股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 深圳鼎合诚知识产权代理有限公司 44281 | 代理人: | 薛祥辉 |
地址: | 518057 广*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 堆栈 保护 方法 装置 | ||
1.一种堆栈的保护方法,其特征在于,包括:
获取可执行文件中每个函数占用的最大堆栈数值,其中,所述可执行文件中配置有多个线程,每个线程下挂有一个或多个用于运行堆栈的实体;
依据所述最大堆栈数值计算出所述一个或多个实体分别占用的最大堆栈计算值;
获取用于标识所述一个或多个实体的符号,并依据所述符号分别获取所述一个或多个实体堆栈配置的配置值;
在所述配置值小于所述计算值时,输出所述配置值与所述计算值的比较结果。
2.根据权利要求1所述的方法,其特征在于,所述获取可执行文件中每个函数占用的最大堆栈数值包括:
获取与所述可执行文件对应的汇编源码;
扫描所述汇编源码得到所述可执行文件中每个函数占用的所述最大堆栈数值。
3.根据权利要求1所述的方法,其特征在于,所述依据所述最大堆栈数值计算出所述一个或多个实体分别占用的最大堆栈计算值包括:
查找所述可执行文件中所述函数与子函数之间的调用关系,并依据所述调用关系构造函数调用树;
遍历所述函数调用树分别得到所述一个或多个实体在所述函数调用树上占用的最大堆栈计算值。
4.根据权利要求1所述的方法,其特征在于,
获取用于标识所述一个或多个实体的符号包括:从所述可执行文件的符号表中获取与所述一个或多个实体定义对应的符号;
依据所述符号分别获取所述一个或多个实体堆栈配置的配置值包括:提取所述符号占用的字段大小,并依据所述字段大小查找到与所述字段大小对应的实体;提取查找到的实体的堆栈配置的配置值。
5.根据权利要求1至4任一项所述的方法,其特征在于,多个所述实体之间配置有只读内存区域。
6.一种堆栈的保护装置,其特征在于,包括:
获取模块,用于获取可执行文件中每个函数占用的最大堆栈数值,其中,所述可执行文件中配置有多个线程,每个线程下挂有一个或多个用于运行堆栈的实体;
计算模块,用于依据所述最大堆栈数值计算出所述一个或多个实体分别占用的最大堆栈计算值;
处理模块,用于获取用于标识所述一个或多个实体的符号,并依据所述符号分别获取所述一个或多个实体堆栈配置的配置值;
输出模块,用于在所述配置值小于所述计算值时,输出所述配置值与所述计算值的比较结果。
7.根据权利要求6所述的装置,其特征在于,所述获取模块包括:
第一获取单元,用于获取与所述可执行文件对应的汇编源码;
扫描单元,用于扫描所述汇编源码得到所述可执行文件中每个函数占用的所述最大堆栈数值。
8.根据权利要求6所述的装置,其特征在于,所述计算模块包括:
第一处理单元,用于查找所述可执行文件中所述函数与子函数之间的调用关系,并依据所述调用关系构造函数调用树;
遍历单元,用于遍历所述函数调用树分别得到所述一个或多个实体在所述函数调用树上占用的最大堆栈计算值。
9.根据权利要求6所述的装置,其特征在于,所述处理模块包括:
第二获取单元,用于从所述可执行文件的符号表中获取与所述一个或多个实体定义对应的符号;
第二处理单元,用于提取所述符号占用的字段大小,并依据所述字段大小查找到与所述字段大小对应的实体;
提取单元,用于提取查找到的实体的堆栈配置的配置值。
10.根据权利要求6至9任一项所述的装置,其特征在于,多个所述实体之间配置有只读内存区域。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610058946.2/1.html,转载请声明来源钻瓜专利网。