为乐趣而非利益寻找编译错误
过去十年,作者在谷歌、Waymo 和 OpenAI 从事机器学习编译器相关工作。过去一周,作者经历了职业生涯中最令人不安的事情之一:一个下午花费超 1 万美元,让 AI 代理对编译器代码进行检测,在 LLVM 中发现数百个可能存在的漏洞,包括许多编译错误,至少有一个问题相当严重。
个人项目:在 LLVM 中寻找漏洞
2026 年 1 月,作者开展个人项目,尝试在 LLVM 中寻找漏洞。作者和 Codex 合作编写了一个模糊测试器,基本思路是生成随机程序,让其通过编译器部分流程,检查编译后的程序是否与原始程序执行相同操作。作者花了几周时间,在 LLVM 的 instcombine 中发现并修复了五个漏洞。之后,模糊测试器找到新漏洞的速度变慢,作者便失去了兴趣。
转战 ptxas 编译器
2026 年 5 月中旬,作者作为承包商加入 SemiAnalysis,决定尝试将同样的技术应用于 NVIDIA 的底层编译器 ptxas。作者预计这次成果可能不如对 LLVM 进行模糊测试,原因有:模糊测试器可能陷入“困境”,闭源编译器修复漏洞较繁琐;使用 ptxas 需从头到尾运行整个编译器,可能降低发现漏洞的可能性;使用 LLVM 可添加检测信息,而对 ptxas 进行模糊测试时作者未使用相关模式,只是进行纯粹的无向模糊测试。然而,三天内作者就发现了 40 个 ptxas 编译错误的程序,一周后这个数字增加到约 80 个。
模糊测试器编写容易的原因
据作者所知,这是 ChatGPT 5.2 和 5.5 之间的差异造成的。作者全程通过与大语言模型(LLM)交流来编写模糊测试器,LLM 承担了修改模糊测试器、最小化测试用例等繁琐工作,作者只需使用 `/goal` 让它循环运行。
在 LLVM 的 AMDGPU 后端寻找漏洞
作者尝试在 LLVM 的 AMDGPU 后端寻找漏洞,速度与在 ptxas 中发现漏洞的速度大致相同。后来,作者改用 SemiAnalysis 的 Claude 账户,发现 Opus 4.7 和 ChatGPT 5.5 在质量上没有区别。
报告漏洞与修复情况
作者将发现的漏洞报告给了 AMD 和 NVIDIA。截至撰写本文时,AMD 已经修复了其中五个漏洞,由于其编译器是开源的,作者可以立即应用这些修复。
让 Claude 通读 LLVM 代码寻找漏洞
作者的 ptxas 和 AMDGPU 模糊测试器开始变慢,作者让 Claude 通读 LLVM 代码来寻找漏洞。Claude 每四分钟就能发现一个漏洞,相比之下,此时模糊测试器要花几个小时才能找到一个新漏洞。作者对 x86 后端也做了同样的操作,结果发现漏洞的速度几乎达到了每分钟两个。
漏洞的重要性与成本
自动查找漏洞面临“这些漏洞重要吗”的问题。代理发现的漏洞平均严重程度低于模糊测试器发现的漏洞,但有一个极其可怕的情况,LLVM 会将原子存储操作转换为两个非原子存储操作,通过模糊测试很难发现这个漏洞。通过与 LLM 交流编写的模糊测试器成本相对较低,而让大量子代理读取代码的成本较高,作者在几个小时内就花费了超过 1 万美元。尽管通过这种方式发现的漏洞平均严重程度低于模糊测试发现的漏洞,但代码检查能够发现一些通过模糊测试很难发现的漏洞类别,对作者来说很有价值。
总结与思考
作者认为这不仅仅是“有了足够多的子代理,所有漏洞都能轻易被发现”这么简单,也许教训是:五个月前不可能做到的事情,现在只是“代价高昂”而已。作者预计在接下来的几个月里,预算不足的人与有预算的人在探索可能性空间上的差距会越来越大。最后,作者思考了六个月后 SemiAnalysis 愿意为令牌支付多少钱,以及那些没有预算或者不愿意支付的个人和公司的生活会变成什么样。同时,作者不确定给 Opus 5.7(甚至 4.7)足够的令牌,它能否通过读取汇编代码来发现 ptxas 的漏洞。