C 对缓冲区大小施加限制

C 对缓冲区大小施加限制,c,buffer-overflow,C,Buffer Overflow,有什么方法可以对字符缓冲区施加大小限制,使缓冲区上的任何操作都不会导致越界访问?简而言之:没有 C不会执行任何运行时检查,除非您手动执行 您可以使用自己的函数、宏和每个缓冲区的簿记来防止无效访问。但是,您必须在任何地方使用该接口,这意味着您将失去对该缓冲区的直接访问 您还将看到额外的条件检查对性能的影响。通过对经证明不会导致越界访问的代码分支使用直接访问,您可能能够避免一些这种情况 编辑: 还有一个相当重要的问题,即一旦检测到无效访问,代码应该做什么。您的程序是否应该输出错误并退出,就像它在其他

有什么方法可以对字符缓冲区施加大小限制,使缓冲区上的任何操作都不会导致越界访问?

简而言之:没有

C不会执行任何运行时检查,除非您手动执行

您可以使用自己的函数、宏和每个缓冲区的簿记来防止无效访问。但是,您必须在任何地方使用该接口,这意味着您将失去对该缓冲区的直接访问

您还将看到额外的条件检查对性能的影响。通过对经证明不会导致越界访问的代码分支使用直接访问,您可能能够避免一些这种情况

编辑:

还有一个相当重要的问题,即一旦检测到无效访问,代码应该做什么。您的程序是否应该输出错误并退出,就像它在其他语言中遇到异常一样?它应该忽略错误吗?它应该尝试修复它吗

处理这个问题的C方法是三思而后行,确保每个代码分支/部分都是安全的,而不是检查每个访问。

简而言之:否

C不会执行任何运行时检查,除非您手动执行

您可以使用自己的函数、宏和每个缓冲区的簿记来防止无效访问。但是,您必须在任何地方使用该接口,这意味着您将失去对该缓冲区的直接访问

您还将看到额外的条件检查对性能的影响。通过对经证明不会导致越界访问的代码分支使用直接访问,您可能能够避免一些这种情况

编辑:

还有一个相当重要的问题,即一旦检测到无效访问,代码应该做什么。您的程序是否应该输出错误并退出,就像它在其他语言中遇到异常一样?它应该忽略错误吗?它应该尝试修复它吗

处理这个问题的C方法是三思而后行,并确保每个代码分支/部分事先都是安全的,而不是检查每个访问。

这可能有助于:在您的任务中。

这可能有助于:在您的任务中。

简短的回答是:不

答案很长: 为了确保像buffer[ULLONG_MAX]这样愚蠢的东西不会越界,您需要声明一个比系统上可表示的最大整数大的边界。这显然是不可能的,除了这样一个缓冲区需要的内存量之外

实用的解决方案是手动跟踪缓冲区的大小,并根据缓冲区大小验证缓冲区中任何不可信的索引。

简短的回答:否

答案很长: 为了确保像buffer[ULLONG_MAX]这样愚蠢的东西不会越界,您需要声明一个比系统上可表示的最大整数大的边界。这显然是不可能的,除了这样一个缓冲区需要的内存量之外

实用的解决方案是手动跟踪缓冲区的大小,并根据缓冲区大小验证缓冲区中任何不可信的索引。

请参阅我们的,它用作调试辅助工具,检测您的C代码,以确定您是否在数组或缓冲区中出错。这会发现valgrind无法解决的问题。

请参阅我们的,它用作调试辅助工具,检测您的C代码以确定您是否在数组或缓冲区中出错。这发现了valgrind无法解决的问题