当前位置: 首页 > ds >正文

sanitizer工具

在协议模糊测试中使用Sanitizer工具需要满足特定前置条件并注意配置细节,以下是关键要点:

🛠️ 一、前置条件与编译器要求
编译器版本

ASan/UBSan/TSan:需Clang ≥ 3.2 或 GCC ≥ 4.8(推荐GCC ≥ 4.9或Clang最新版以获得完整功能)。

MSan:需Clang ≥ 3.4,且必须静态链接所有依赖库(包括libc),否则检测可能失效。

验证命令:clang --version 或 gcc --version。
调试符号生成

编译时需添加 -g 选项生成调试信息,否则错误报告无法定位代码行号。
gcc -fsanitize=address -g your_program.c -o your_program

平台与架构支持

ASan/UBSan:支持Linux x86_64、ARM、AArch64等主流平台。

TSan:仅支持64位系统(Linux x86_64/AArch64),不支持32位平台。

MSan:对Linux依赖性强,且需所有代码(含第三方库)完全插桩。

⚙️ 二、编译选项与运行时配置
Sanitizer类型 编译选项 关键运行时环境变量 检测能力说明

ASan -fsanitize=address export ASAN_OPTIONS=disable_coredump=0:abort_on_error=1 内存越界、释放后使用、泄漏
UBSan -fsanitize=undefined export UBSAN_OPTIONS=print_stacktrace=1 整数溢出、空指针解引用等未定义行为
TSan -fsanitize=thread 无需额外变量,但需避免与ASan混用 数据竞争、死锁
MSan -fsanitize=memory export MSAN_OPTIONS=poison_in_dtor=1 未初始化内存访问

💡 编译注意事项:

  • 添加 -fno-omit-frame-pointer 确保调用栈可读。

  • TSan需额外加 -fPIE -pie 保证位置无关代码。

  • MSan需用 -static-libsan 静态链接运行时库。

⚠️ 三、兼容性与性能权衡
工具互斥性

ASan与TSan不可同时启用(内存模型冲突),需分开测试。

MSan需独立运行,因它要求所有代码(包括libc)完全插桩。
性能开销

工具 速度降低 内存开销 适用场景
ASan 2x 3x 常规内存错误检测
TSan 5x-15x 5x-10x 高并发场景数据竞争分析
MSan 3x 2x-3x 未初始化内存敏感场景

生产环境禁用

Sanitizer的性能损耗和内存占用使其仅适用于测试环境,生产环境需移除编译选项。

🔧 四、高级配置技巧
定制错误报告

通过 ASAN_SYMBOLIZER_PATH=/path/to/llvm-symbolizer 指定符号解析器,提升堆栈可读性。

使用 attribute((no_sanitize(“thread”))) 排除特定函数插桩。
泄漏检测增强(ASan)

添加 -fsanitize=leak 可独立检测内存泄漏(无需完整ASan)。
MSan初始化追踪

启用 -fsanitize-memory-track-origins=2 可追溯未初始化值的来源链。

💎 总结
基础命令足够:用户提供的编译选项(如 -fsanitize=address)是核心,但需搭配 -g 及平台适配参数。

关键前置条件:验证编译器版本、确保调试符号、注意工具互斥性及平台限制。

进阶需求:通过环境变量定制错误报告行为,或结合覆盖率工具(如 -fsanitize-coverage=trace-pc-guard)提升模糊测试效率。

📌 实践建议:首次使用可从ASan入手(兼容性最佳),逐步扩展至TSan/MSan。完整示例参考 https://github.com/google/sanitizers/wiki/AddressSanitizer。

http://www.xdnf.cn/news/12469.html

相关文章:

  • 基于Pandas数据分析的设备巡检计划生成算法设计及实现
  • 设置Linux时区环境变量TZ
  • Java常用工具类方法详解及使用案例
  • 【大模型:知识库管理】--开源工具Ragflow介绍+本地搭建
  • 美化显示LLDB调试的数据结构
  • c#基础010(程序结构)
  • Spring Boot论文翻译防丢失 From船长cap
  • 搜广推特征数据变更灰度为什么实现很困难
  • float、double 这类 浮点数 相比,DECIMAL 是另一种完全不同的数值类型
  • 【地图 - 问题】公司etm地图:聚合功能重复添加,导致图标重复添加,导致部分重复添加的图标无法清除
  • 计算机组成原理(计算篇)
  • AIGC赋能前端开发
  • 多进程与多线程:核心差异与实战选择
  • AIGC-SD3、控制
  • 在亚马逊选品时,可依托数据驱动的关键词分析体系
  • vue2.0高频面试题汇总--持续更新
  • 基于STM32的DS18B20温度远程监测LCD1602显示
  • Vue3.5 企业级管理系统实战(二十三):权限指令
  • 【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】
  • 根据指定日期和cron表达式生成下一周期的执行时间
  • C++类二
  • 吞咽与营养并重:进行性核上性麻痹患者的饮食管理方案
  • 龙虎榜——20250605
  • ubuntu安装NVIDIA驱动没有网络
  • 【GESP真题解析】第 12 集 GESP 三级 2024 年 6 月编程题 1:移位
  • Spring Cloud 2025 正式发布,你的灾难要来了
  • 系统思考持续训练
  • 前端面试题之浏览器存储技术Cookie、LocalStorage、SessionStorage、indexDB
  • FEMFAT许可管理软件推荐
  • js 比较两个对象的值,不相等就push对象的key