我想使用"检查库"为malloc(3)编写一个检查单元测试。
这个单元测试应该会产生缓冲区溢出。
你能否给我一些缓冲区溢出的简单例子?
答案 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
的特定实现,否则为它创建测试用例毫无意义。根据你问题的措辞,情况似乎并非如此。