Page 37 - 《软件学报》2025年第7期
P. 37
2958 软件学报 2025 年第 36 卷第 7 期
作符也展示了强大的能力, 特别是在处理复杂语法结构时表现尤为突出. 相比之下, AFL++ 尽管作为传统模糊测
试工具同样表现出色, 但在感知语义方面略显不足.
这些结果表明, 当模糊测试工具能够利用语义信息进行变异时, 其探索代码覆盖率的能力能够得到显著提升,
SemaAFL 成功例证了这一点. 这也进一步揭示了未来模糊测试工具的发展方向, 即结合语义信息的利用能力, 全
面提升代码覆盖率和缺陷发现能力.
4.4 缺陷挖掘的能力
我们在一台第 4.1 节所述的服务器上运行 SemaAFL 一周时间, 合计在 GCC-14 和 Clang-18 上找到并上报了
6 个缺陷, 这些缺陷的详细信息如表 6 所示. 这 6 个缺陷均在 24 h 内被开发者确认, 且均为前所未知的缺陷 (尽在
最近的数个版本可以触发).
表 6 已上报的 GCC-14 和 Clang-18 的缺陷
编译器 缺陷编号 缺陷概述
GCC #115641 GCC crashes on function has attribute ‘__attribute__((const))’
GCC #115642 internal compiler error: tree check: expected class ‘type’, have ‘exceptional’ (error_mark) in c_expr_sizeof_expr
GCC #115644 ICE if redeclare a variable with different type
GCC #115646 ICE in gen_conditions_for_pow_int_base, at tree-call-cdce.cc:587
Clang #96624 UNREACHABLE executed: Non-canonical and dependent types shouldn’t get here
Clang #96627 UNREACHABLE executed: Type not integer, floating, or complex
下面讨论两个上报的缺陷案例, 并展示基于语义信息的变异操作符是如何找到这两个缺陷的. 这两个缺陷均
导致了编译器的崩溃, 一个在 GCC 的最新版本中, 一个在 Clang 的最新版本中.
缺陷案例 1: 图 6 展示了我们所发现的其中一个 GCC 的缺陷. 该缺陷会导致 GCC 在运行过程中崩溃. 我们通
过“随机插入属性”这一语义级别的变异操作符, 给函数 f 插入了__attribute__((const)) 这一属性, 如图 6 第 8 行所
示. 该属性会通知编译器函数 f 是纯函数, 不会依赖外部状态且具有相同输入时总是返回相同的输出. 在添加这一
属性之后, GCC 崩溃并抛出了内部编译器错误 (ICE) 信息: expected tree that contains ‘decl common’ structure, have
‘call_expr’ in tree_could_trap_p.
缺陷案例 2: 图 7 展示了我们所发现的其中一个 Clang 的缺陷. 该缺陷会导致 Clang 在运行过程中崩溃. 我们
通过“随机插入数学函数调用”这一语义级别的变异操作符, 给函数 f 的返回语句的返回表达式中的子表达式 c1
插入了对数学函数 abs 的调用, 如图 7 第 11、12 行所示. 在添加这一数学函数调用之后, Clang 崩溃并抛出了内部
编译器错误 (ICE) 信息: UNREACHABLE executed: Type not integer, floating, or complex.
图 6 GCC 的崩溃缺陷 (编号#115641) 图 7 Clang 的崩溃缺陷 (编号#96627)

