一种检测内存边界溢出错误的方法与流程

文档序号:14774085发布日期:2018-06-23 02:32阅读:来源:国知局
一种检测内存边界溢出错误的方法与流程

技术特征:

1.一种检测内存边界溢出错误的方法,其特征在于,包括如下步骤:

步骤一:编码器读取待检测的源代码并将其转变成中间代码;

步骤二:分析中间代码,采用基于对象的边界检测技术完成对象的对齐分配并实现边界表;

步骤三:在中间代码中插入检测函数;

步骤四:通过分析优化,简化冗余操作,生成优化后的中间代码;

步骤五:将优化后的中间代码链接到二进制的库文件,生成可执行文件;

步骤六:运行可执行文件,检测函数会在指针解引用其所指向对象之前判断当前指针是否越出对象边界,当遇到有指针越界,缓冲区溢出等内存安全错误,程序会调用终止执行并报错。

2.如权利要求1所述的检测内存边界溢出错误的方法,其特征在于,所述步骤二中采用基于对象的边界检测技术完成对象的对齐分配并实现边界表的具体过程为:

首先,以对齐方式分配对象:对象的对齐分配直接利用内存分配器对程序产生的对象进行边界控制,利用二进制的内存分配器来满足内存对象的填充与对齐存储;

然后,边界表的实现方法:在程序对象分配的时对对象的边界进行控制,通过填充使得对象所占内存为2的幂,在边界表中存储的是分配大小的对数的二进制表达(e=log2(size)),通过(size=1<<e;base=p&~(size-1);)操作还原出对象的分配大小和指向分配地址开始位置的指针。

3.如权利要求2所述的检测内存边界溢出错误的方法,其特征在于,是使用连续数组来实现边界表。

4.如权利要求1所述的检测内存边界溢出错误的方法,其特征在于,所述步骤三中在中间代码中插入检测函数,执行边界检查的具体操作如下:

使用p指针的值和分配大小e的对数的二进制值,其中的e是从边界表中获取的,以此保证如果q和p只在最低有效位有区别那么q指针就在边界内部。

5.如权利要求1所述的检测内存边界溢出错误的方法,其特征在于,所述步骤四中具体优化步骤如下:

首先,由之前的步骤三中已经在中间代码中为每个指针运算都添加了检查代码;

其次,对存在于循环体内的所有指针运算进行最大范围的值域分析。

6.如权利要求5所述的检测内存边界溢出错误的方法,其特征在于,所述最大范围是指:在一个循环体内部的多个指向同一缓冲区的指针变量的最大指向范围。

7.如权利要求1所述的检测内存边界溢出错误的方法,其特征在于,所述步骤六中检测函数通过检查指针当前的指针地址是否在该指针所指对象的内部,对象的地址是通过边界表查询得到。

8.如权利要求1所述的检测内存边界溢出错误的方法,其特征在于,所述待检测的源代码为C或C++语言。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1