1 .一种内存池内存错误分析识别方法,其特征在于,该方法是采用内存Red Zone与
LLVM代码插桩技术,通过LLVM代码插桩技术实现动态、实时对内存越界的检测,进而实现快
速检测及识别重复释放错误、内存泄漏错误、内存越界错误及悬空指针错误;具体如下:
为每块内存前面和后面额外增加一块Red Zone内存区域;
每块内存的头部Red Zone内存区域增加两部分内存信息:内存头部相关信息及内存头
部标识区域;
在每块内存的尾部Red Zone内存区域增加内存的尾部标识。
2 .根据权利要求1所述的内存池内存错误分析识别方法,其特征在于,内存头部相关信
息包括申请的内存大小及申请内存的程序调用栈信息。
3 .根据权利要求1或2所述的内存池内存错误分析识别方法,其特征在于,内存头部标
识区域选择特定的数值进行标记内存已分配状态;
内存的尾部标识选择特定的数值进行标记对应区域为内存尾部。
4 .根据权利要求3所述的内存池内存错误分析识别方法,其特征在于,识别重复释放错
误具体如下:
通过在释放内存时,检查待释放内存的内存头部标识区域中是否为内存分配状态:
若是内存分配状态,则正常;
若不是内存分配状态,则识别为重复释放错误。
5 .根据权利要求4所述的内存池内存错误分析识别方法,其特征在于,识别内存越界错
误具体如下:
通过内存的尾部标识进行检测:
若内存的尾部标识被改写成非预定义值,则必定发生内存越界;
若内存越界的范围不在内存的尾部标识区域,当发生内存越界错误时,则通过引入
LLVM代码插桩技术进行内存越界识别;
其中,内存越界的范围不在内存的尾部标识区域包括如下情况:
①内存的内存头部标识区域前面;
②内存的尾部标识区域后面无法被识别。
6 .根据权利要求5所述的内存池内存错误分析识别方法,其特征在于,通过引入LLVM代
码插桩技术进行内存越界识别具体如下:
通过添加自定义的pass识别越界的发生,在pass中遍历所有函数、遍历所有函数的代
码块及遍历所有代码块的指令 ,在所有指令中识别所有加载与存储指令,加载与存储指令
对内存读、写的地方增加检测所访问的区域是否为申请的内存区域:
若不是,则识别为内存越界。
7 .根据权利要求6所述的内存池内存错误分析识别方法,其特征在于,识别悬空指针错
误具体如下:
通过内存越界中LLVM代码插桩技术的检测的方式在读写访问内存时检测内存头部标
识区域是否为分配状态识别悬空指针错误。
8.根据权利要求7所述的内存池内存错误分析识别方法,其特征在于,识别内存泄漏错
误具体如下:
在程序退出时进行检测:
权 利 要 求 书
1/2 页
2
相关文档
评论