gpt4 book ai didi

c - 全局缓冲区溢出,Windows 环境

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:12 25 4
gpt4 key购买 nike

几天前我问了一个关于缓冲区溢出检测的问题(sprintf buffer global data overflow - how to detect it, Windows),这个问题只能通过标准功能的 cppcheck 解决(不是安全的 _s 版本)。

我更深入地修改了代码

#include <stdio.h>
char buffer[2];
void main()
{
sprintf(buffer,"12345");
}

#include <stdio.h>
void f( char *b )
{
sprintf(b,"12345");
}

char buffer[2];
void main()
{
f( buffer );
}

Visual Studio 2012/RTC 可以处理堆栈分配的缓冲区溢出 - 在运行时,但全局数据未被检测到。

我猜无法使用 cppcheck 进行深入分析,并且 cppcheck-1.64 未检测到此问题。此外,我还尝试将 clang 与 AddressSanitizer ( Windows ) 一起使用,但效果不佳。

是否有可能在 Windows 下防止此类问题(最好是免费工具),如果不能,也许某些 linux 工具可以提供帮助?

最佳答案

我知道答案有点晚了,但在类似情况下它仍然可以提供帮助。
Cppcheck 不断改进,现在能够检测到这个问题。
最新版本的 Cppcheck(目前是 1.86 版本)在分析第二个代码示例时输出此错误消息:

$ ./cppcheck global_buffer_overflow.c
Checking global_buffer_overflow.c ...
[global_buffer_overflow.c:10] -> [global_buffer_overflow.c:4]: (error) Buffer is accessed out of bounds: buffer

我不确定它是否已经在 1.85 版本中工作,但它肯定不适用于 1.84 或更早的版本。我想如果你隐藏全局缓冲区更好,Cppcheck 最终将不再能够检测到问题。值(value)流分析有些复杂,需要一些资源(内存、时间、CPU)。

关于c - 全局缓冲区溢出,Windows 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22759451/

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