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

在C中创建malloc()缓冲区溢出,c,malloc,C,Malloc,我想使用“检查库”为malloc(3)编写一个检查单元测试 这个单元测试应该产生缓冲区溢出 在int变量(即int*ptr=malloc(3))上分配一个double是否是缓冲区溢出 分配一个大于整数最大值的数字怎么样 你能给我其他一些关于缓冲区溢出的简单例子吗?在malloc生成的缓冲区末尾写入或读取数据,这意味着发生这种情况时,你不能依赖于任何特定的行为。程序可能看起来正常工作,可能会转储内核,也可能会输出意外结果 由于溢出malloc缓冲区会导致未定义的行为,因此为其创建测试用例是毫无意义

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

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

  • 在int变量(即int*ptr=malloc(3))上分配一个double是否是缓冲区溢出
  • 分配一个大于整数最大值的数字怎么样

  • 你能给我其他一些关于缓冲区溢出的简单例子吗?

    在malloc生成的缓冲区末尾写入或读取数据,这意味着发生这种情况时,你不能依赖于任何特定的行为。程序可能看起来正常工作,可能会转储内核,也可能会输出意外结果


    由于溢出malloc缓冲区会导致未定义的行为,因此为其创建测试用例是毫无意义的,除非您正在测试
    malloc
    的特定实现。根据您问题的措辞,情况似乎并非如此。

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

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

    否,因为没有访问缓冲区

    分配一个大于整数最大值的数字怎么样

    否,因为没有访问缓冲区

    要使缓冲区溢出,必须先有一个缓冲区,然后再使其溢出。例如:

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

    在这里,我为两个整数分配一个缓冲区,然后通过访问第三个整数(0是第一个,1是第二个,所以2是第三个)使其溢出。

    有一个数字的最大值,对吗?所以我不能无限期地在int值上写数字。正如我所说的,我的测试用例应该会造成缓冲区溢出。如果我分配的int指针(int*ptr=malloc(3))我给它一个大值(即*ptr=595),我可以这样做吗?那么这是缓冲区溢出吗?如果平台上的
    sizeof(int)>3
    ,这就是缓冲区溢出。否则,no.和也
    inti=j[2]
    将是缓冲区溢出,尽管是读操作而不是写操作。它还将访问未初始化的数据,如
    i=j[0]
    i=j[1]不是缓冲区溢出,否则正常。