返回
CLower: Detecting Compiler Pessimization Bugs through Redundant Memory Accesses
DOI:10.1145/3798250.png)
摘要
En 中文
编译器预期生成优化代码,但有时会引入悲观化(质量下降的冗余指令)。这些错误不仅导致性能开销,还通过引入意外的副作用(如冗余内存访问)扩大攻击面,而无需破坏编译正确性。现有错误检测方法既未针对此类安全敏感的悲观化设计,也难以有效识别。本文提出CLower,一种新颖的黑盒方法,通过冗余内存访问自动检测编译器悲观化。CLower的核心洞见是:与源代码相比,完全优化的二进制文件中任何额外的全局内存访问均指示悲观化。为可靠区分编译器引入的冗余与源代码级别的冗余,我们生成随机C程序,其中每个全局变量具有预定且可控的内存访问次数。CLower随后执行插桩后的二进制文件,验证编译过程中是否引入了多余访问。我们将CLower应用于GCC和LLVM,报告了23个独特错误(GCC 21个,Clang 2个),其中16个被确认为新的悲观化错误。我们的评估表明,CLower能准确检测多样化的、影响显著的悲观化错误,其中多数(75%)也体现在堆分配对象上,证明底层编译器缺陷具有普遍性,不限于全局内存。此外,我们识别出编译器优化与悲观化错误之间的系统性冲突,导致许多此类错误在编译器版本中保持隐藏。本研究揭示了编译器悲观化这一未充分探索领域,并提供实用工具以提升编译器质量。
Keyword:
Compiler Pessimization
Randomized Testing
期刊
P
IF:
2.8
论文数:
308
被引数:
4.7K
机构
引用论文
暂无论文信息

