You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual C++中Address Sanitizer如何忽略读溢出仍捕获写缓冲区溢出

可以通过两种方式实现该需求,优先排查危险性更高的堆缓冲区写溢出错误,暂时忽略读溢出报错:

方案1:编译期配置仅检测非法写访问

使用Clang或GCC 12+编译时,添加额外的LLVM后端参数,指定ASAN仅检测无效写操作,完全忽略所有无效读操作的检测:

# Clang 编译示例
clang++ -fsanitize=address -mllvm -asan-detect-invalid-access=write your_code.cpp -o test_bin

该方案的优势是编译时就剔除了读溢出检测逻辑,运行时性能开销更低,不需要额外的运行时配置。

方案2:运行时通过抑制文件过滤读溢出报错

如果不需要修改现有编译流程,可以通过ASAN的运行时抑制规则过滤堆读溢出报错:

  1. 新建抑制规则文件asan_suppress.txt,写入如下规则:
heap-buffer-overflow:READ
  1. 运行程序时指定加载该抑制文件即可:
ASAN_OPTIONS="suppressions=./asan_suppress.txt" ./test_bin

如果需要同时过滤栈、全局变量等其他区域的读溢出报错,在抑制文件中补充对应规则即可:

stack-buffer-overflow:READ
global-buffer-overflow:READ
use-after-free:READ

注意:建议完成所有写溢出问题修复后,及时恢复读溢出检测,避免遗漏潜在的逻辑错误。

内容的提问来源于stack exchange,提问作者Alex Guteniev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:06:07