在C中创建malloc()缓冲区溢出0
我想使用“检查库”为malloc(3)编写一个检查单元测试。在C中创建malloc()缓冲区溢出0
这个单元测试应该会产生缓冲区溢出。
- 在int变量上分配一个double(即int * ptr = malloc(3))缓冲区溢出?
- 怎么样分配一个大于int的最大值的数字?
您能否给我一些缓冲区溢出的简单例子?
写入或读取由malloc
分配的缓冲区的末尾会产生undefined behavior,这意味着在发生时不能依赖任何特定行为。该程序可能似乎工作,它可能会核心转储,或者它可能会输出意外的结果。
因为溢出一个malloc'ed缓冲区导致未定义的行为,所以为它创建测试用例是毫无意义的,除非您正在测试malloc
的特定实现。根据你的问题的措辞,似乎并非如此。
要溢出缓冲区,您需要访问超出其保证大小或开始之前的缓冲区。分配并不真正访问任何可见的缓冲区,所以很难看到任何类型的分配是否会成为缓冲区溢出,除非分配例程本身存在错误或其结构已损坏。
在int变量上分配一个double(即int * ptr = malloc(3))缓冲区溢出?
不,因为没有缓冲区被访问。
如何分配一个大于int的最大值的数字?
不,因为没有缓冲区被访问。
要溢出一个缓冲区,你必须首先有一个缓冲区,然后溢出它。例如:
int* j = malloc (2 * sizeof (int));
j[2] = 1;
在这里,我分配缓冲区与两个整数空间,然后通过访问第三整数(0是第一个,1是第二,所以图2是第三)溢出它。
并且'int i = j [2];'会是一个缓冲区溢出,尽管是读取而不是写入操作。它也会访问未初始化的数据,就像'i = j [0];'或'i = j [1];'它们不是缓冲区溢出,否则就是OK。 –
数字的最大值是多少?所以我不能无限地在一个int值上写数字。 – surveyCorps
正如我所说,我的测试案例应该会产生缓冲区溢出。我可以这样做,如果我分配的int指针(int * ptr = malloc(3))我给它一个很大的值(即* ptr = 59595959595959595959595959595)?那么这是一个缓冲区溢出? – surveyCorps
如果您的平台上的sizeof(int)> 3'是一个缓冲区溢出。否则,不。 –