gpt4 book ai didi

c - 识别/防止静态缓冲区溢出的工具和方法

转载 作者:行者123 更新时间:2023-12-03 03:30:32 27 4
gpt4 key购买 nike

是否有任何工具或方法可以识别静态定义数组中的缓冲区溢出(即 char[1234] 而不是 malloc(1234))?

昨天我花了大部分时间来追踪崩溃和奇怪的行为,最终证明是由以下行引起的:

// ensure string is nul terminated due to stupid snprintf
error_msg[error_msg_len] = '\0';

该索引显然导致写入超出数组范围。这会导致指针变量被破坏,进而导致该指针稍后出现意外行为。

我想到的三件事可以帮助缓解此类问题:

  1. 代码审查

    这还没有完成,但我正在努力。

  2. valgrind

    我在开发过程中经常使用 valgrind 来检测内存问题,但它不处理静态数组。在上面的例子中,它只向我展示了一些症状,例如被破坏的指针的 free() 无效。

  3. -fstack-protector-all

    过去,我曾使用 -fstack-protector-all 来检测像上面这样的溢出,但由于某些奇怪的原因,它在这种情况下没有标记任何内容。

那么任何人都可以提供关于如何识别此类超支的任何想法吗?要么通过改进上面的列表,要么通过全新的东西。

编辑:到目前为止,一些答案提到了相当昂贵的商业产品。在现阶段,我认为我无法说服当局购买这样的工具,因此我想将工具限制为便宜/免费。是的,一分钱一分货,但有所改进总比没有好。

最佳答案

静态分析工具能够检测一些缓冲区溢出。

例如使用以下代码:

char bla[1024];
int i;

for (i = 0; i <= 1024; i++)
bla[i] = 0;

以下是 PC-Lint/flexelint 的报告:

tst.c 9 Warning 661: Possible access of out-of-bounds pointer (1 beyond end of data) by operator '[' [Reference: file tst.c: lines 8, 9]

关于c - 识别/防止静态缓冲区溢出的工具和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036826/

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