在C中创建malloc()缓冲区溢出

时间:2016-09-13 20:07:45

标签: c malloc

我想使用"检查库"为malloc(3)编写一个检查单元测试。

这个单元测试应该会产生缓冲区溢出。

  1. 是否在int变量上分配了一个double(即int * ptr = malloc(3))缓冲区溢出?
  2. 如果分配的数字大于int的最大值?
  3. 你能否给我一些缓冲区溢出的简单例子?

2 个答案:

答案 0 :(得分:2)

要超出缓冲区,您需要访问其保证大小之外或开始之前的缓冲区。分配并不真正访问任何可见的缓冲区,因此很难看出任何类型的分配如何是缓冲区溢出,除非分配例程本身存在错误或其结构已损坏。

  

在int变量上分配一个double(即int * ptr = malloc(3))缓冲区溢出?

不,因为没有访问缓冲区。

  

如果分配的数字大于int的最大值?

不,因为没有访问缓冲区。

要超出缓冲区,必须首先使用缓冲区,然后将其溢出。例如:

int* j = malloc (2 * sizeof (int));
j[2] = 1;

这里我为两个整数分配一个带空格的缓冲区,然后通过访问第三个整数来超越它(0是第一个,1是第二个,所以2是第三个)。

答案 1 :(得分:0)

malloc分配的缓冲区末尾写入或读取会产生undefined behavior,这意味着当它发生时你不能依赖任何特定的行为。该程序似乎可以工作,它可能是核心转储,或者它可能会输出意想不到的结果。

因为超越malloc'ed缓冲区会导致未定义的行为,除非您正在测试malloc的特定实现,否则为它创建测试用例毫无意义。根据你问题的措辞,情况似乎并非如此。