gpt4 book ai didi

为缓冲区溢出错误创建测试用例 (C/c++)

转载 作者:太空狗 更新时间:2023-10-29 17:18:46 25 4
gpt4 key购买 nike

如何在 c 语言中为缓冲区溢出创建单元测试用例,而不会导致内存错误(例如段错误)?

即给定一个简单的缓冲区溢出,例如

int function () {
int exampleArray[10];
exampleArray[10] = 5;
return 0;
}

如何为这段代码创建单元测试?显然有一个错误,我们正在写一个数组的末尾。但是,您可以在没有任何错误证据的情况下运行这样的函数。

注意:我需要能够为用户在运行时提供数组索引的时间以及上述简化情况创建测试用例。

在像 Java 这样的托管语言中,代码会抛出一个可以被捕获的异常 (ArrayIndexOutOfBoundsException)。因此创建测试用例很简单(异常的 try-catch block )。

如何在 c 中创建这样的测试? C 的任何单元测试框架都可以处理这种情况吗?

背景信息:我正在尝试自动生成测试用例。我知道错误在哪里,并且希望能够创建一个单元测试来解决这些错误。

但是,我完全不知道如何创建一个测试用例,该用例因缓冲区溢出错误而失败,但不会导致应用程序崩溃。

最佳答案

如果您正在使用堆,一种检查方法是在缓冲区前后分配额外的字节。但是很难跟踪每个变量。函数结束后,您可以检查这些缓冲区中的数据是否被修改。您必须创建一个单独的库来为您保存这些值。

或者检查这个 link .希望它能为您提供更多有关缓冲区溢出测试的信息。

编辑:更多信息:

  1. 测试不接受任何输入的 API 很困难,甚至不是您的工作。但是,如果 API 接受将在执行过程中被操纵的输入,那么您可以传递可能导致溢出的值。

    void foo()
    {

    char buffer [5];


    strcpy(buffer, "StackOverflow");

    // Clearly overflow. Has to be found out in Code reviews or static analysis


    }

关于为缓冲区溢出错误创建测试用例 (C/c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3252883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com