IT资讯 GCC 11 的静态分析功能将得到增强

tanyel · 2021-01-31 08:00:06 · 热度: 12

在去年的 GCC 10 中,David Malcolm 为其实现了一个新选项 -fanalyzer —— 一个静态分析器,可以在编译时通过静态分析识别各种问题,比如安全漏洞 CVE-2020-1967。而根据 David Malcolm 最新的博客内容,该功能在 GCC 11 中将得到增强。

GCC 11 的静态分析功能将得到增强

在这次更新中,该静态分析器有两个部分将被重写,即跟踪程序状态相关和内存泄漏检测及不确定性。

在 GCC 10 中,状态跟踪组件存在很多崩溃错误,其中一个大问题是使用唯一 ID 来跟踪符号值和区域,目前修改为使用唯一对象(单例)来表示符号值和区域。另一个大问题是之前的实现中,符号值和区域被用来表示内存区域的符号访问路径到符号值的映射,目前修改为内存中位偏移群集的映射。

GCC 10 中的内存泄漏检测存在很多误报,并且分析器的确切行为因调用而异,由于哈希算法,迭代的顺序将隐式取决于精确的指针值。指针值可能由于地址空间布局随机化而不同,从而导致不同的结果。该部分内容已经重写,新的内存泄漏检测将更少误报,并且分析器的行为在每次运行时都可重现。

同时,该静态分析功能新增了 4 个 -Wanalyzer 前缀的警告,这些警告都对应 C 和 C++ 中已经存在的 -W 警告,但是实现并不相同。

除上述改动以外,静态分析器还有两个正在开发中的新功能:标记 API 和 以 HTML 方式输出结果。前者可以检测泄漏和双重释放,后者是对输出报告可视化的优化,比如 Double-free bugSignal handler issueMemory leak

目前 GCC 11 已经进入最后开发阶段,预计于下个季度发布,并且 -fanalyzer 现在仅支持 C,对 C++ 的支持计划于 GCC 12 中实现。

相关阅读

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册