[发明专利]记录全局变量信息及检测全局变量越界操作的方法、装置在审
申请号: | 201710486350.7 | 申请日: | 2017-06-23 |
公开(公告)号: | CN109117357A | 公开(公告)日: | 2019-01-01 |
发明(设计)人: | 汪世龙;杜乐生 | 申请(专利权)人: | 中兴通讯股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京安信方达知识产权代理有限公司 11262 | 代理人: | 孙敬霞;李丹 |
地址: | 518057 广东省深圳市南山*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 全局变量 模块信息 越界 数据段 起始地址 信息表 检测 信息表地址 模块数据 内存消耗 信息注册 预先建立 动态库 哈希表 主程序 记录 并发 检查 创建 申请 | ||
1.一种记录全局变量信息的方法,其特征在于,预先建立模块信息表,所述模块信息表为哈希表;所述方法包括:
获取当前模块数据段在内存中的起始地址和数据段大小;
创建当前模块的全局变量信息表,并将所述模块的全局变量信息注册到所述全局变量信息表中;
将当前模块的所述数据段在内存中的起始地址、所述数据段大小以及全局变量信息表地址作为当前模块的模块信息存入所述模块信息表;
其中,所述模块为如下之一:动态库;主程序。
2.根据权利要求1所述的方法,其特征在于,所述创建当前模块的全局变量信息表,包括:
按照当前模块所属全局变量信息表总大小动态申请内存,并将所述全局变量信息表的所有元素清零。
3.根据权利要求2所述的方法,其特征在于,按照当前模块所属全局变量信息表总大小动态申请内存之前,还包括:
将当前模块的所述数据段大小除以8,并将商向上取整后获得所述全局变量信息表的元素数量,并基于所获得的元素数量以及所述全局变量信息表中元素的大小,获取当前模块所属全局变量信息表总大小。
4.根据权利要求1所述的方法,其特征在于,将所述模块的全局变量信息注册到所述全局变量信息表中,包括:
根据全局变量起始地址和所述当前模块数据段在内存中的起始地址,获得起始索引值;
根据全局变量大小获取需占用的元素数量N;
在所述全局变量信息表中从所述起始索引值开始的N个元素中全部填入全局变量信息,所述全局变量信息包括所述全局变量起始地址和所述全局变量大小。
5.根据权利要求4所述的方法,其特征在于,所述根据全局变量起始地址和所述当前模块数据段在内存中的起始地址,获得起始索引值,包括:
将所述全局变量起始地址按照8字节对齐后,减去所述当前模块数据段在内存中的起始地址,再将得到的差值除以8的商向上取整获得所述起始索引值。
6.根据权利要求4所述的方法,其特征在于,所述根据全局变量大小获取需占用的元素数量N,包括:
将所述全局变量大小除以8的商向上取整,获取需占用的元素数量N。
7.根据权利要求1至6任一项所述的方法,其特征在于,
所述获取当前模块数据段在内存中的起始地址和数据段大小之前,还包括:在当前模块中插入初始化桩子;
所述获取当前模块数据段在内存中的起始地址和数据段大小,包括:
所述初始化桩子在当前模块加载之后先于被测程序代码运行,以获取当前模块数据段在内存中的起始地址和数据段大小。
8.根据权利要求7所述的方法,其特征在于,
将所述模块的全局变量信息注册到所述全局变量信息表中之前,还包括:在当前模块中为每个全局变量生成一个全局变量注册桩子;
将所述模块的全局变量信息注册到所述全局变量信息表中,包括:所述全局变量注册桩子被所述初始化桩子调用,以将所述模块的全局变量信息注册到所述全局变量信息表中。
9.一种检查全局变量越界操作的方法,其特征在于,包括:
被测程序运行后并试图进行内存访问时,根据试图访问的内存地址和访问范围,从预建立的模块信息表中查找与所述内存地址相匹配的模块信息;
根据所述内存地址及其匹配的所述模块信息,获取对应的全局变量信息;
将所述内存地址和访问范围对应的内存地址范围与所述全局变量信息对应的全局变量内存范围比较,作出本次操作的越界判决;
其中,所述模块信息包括模块的数据段在内存中的起始地址、数据段大小以及全局变量信息表地址;
其中,所述模块为如下之一:动态库;主程序。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710486350.7/1.html,转载请声明来源钻瓜专利网。