发明名称 一种堆数据处理方法及装置
摘要 本发明公开了一种堆数据处理方法及装置,该方法包括:确定用户需要分配内存写入数据时,从堆区中选择空闲堆进行分配,并动态更新设定区域中与所分配的堆对应的堆元数据;或者,确定用户请求释放已分配堆时,释放用户请求的已分配堆,并动态更新设定区域中与所释放的堆对应的堆元数据;其中所有堆的堆元数据集中存储在所有堆所占区域外的内存中的设定区域中。本发明方法采用集中的方式把所有堆的堆元数据存储在一块安全的内存区域中,从存储形式上将堆元数据与堆中数据分离开来,用户的修改对象只能是堆中数据,不能修改堆元数据,可有效预防攻击者通过堆溢出来修改堆元数据的问题。
申请公布号 CN102521143B 申请公布日期 2015.04.15
申请号 CN201110418751.1 申请日期 2011.12.14
申请人 瑞斯康达科技发展股份有限公司 发明人 蒙磊
分类号 G06F12/02(2006.01)I;G06F11/00(2006.01)I 主分类号 G06F12/02(2006.01)I
代理机构 北京同达信恒知识产权代理有限公司 11291 代理人 孔凡红
主权项 一种堆数据处理方法,其特征在于,包括:确定用户需要分配内存写入数据时,从堆区中选择空闲堆进行分配,并动态更新设定区域中与所分配的堆对应的堆元数据;或者,确定用户请求释放已分配堆时,释放用户请求的已分配堆,并动态更新设定区域中与所释放的堆对应的堆元数据;其中所有堆的堆元数据集中存储在所有堆所占区域外的内存中的设定区域中,所述设定区域在为堆区的低地址区域开辟的一定长度的空间,所述堆元数据的结构包括prev_size字段、size字段、staus字段、指针md、指针bk,其中,prev_size字段表示存放前一堆的堆长度,size字段包含当前堆的堆长度及堆管理信息,所述堆管理信息包括前一堆是否为空闲堆,status字段表示当前堆为空闲堆或已分配堆,指针md指向当前堆在内存中的地址,指针bk指向下一堆的堆地址。
地址 100085 北京市海淀区上地六街28号院2号楼