John Regehr 的 C 语言整数测验
摘要
这是 John Regehr 的 C 语言整数测验的存档版本,使用 JavaScript 封装以实现浏览器兼容性,重点介绍了 C 代码中棘手的未定义行为和整数问题。
<p><a href="https://lobste.rs/s/gl13es/john_regehr_s_integers_c_quiz">评论</a></p>
查看缓存全文
缓存时间: 2026/05/21 16:16
# John Regehr 的 C 语言整数知识测验
来源:https://acepace.net/integerQuiz/
## 欢迎参加 John Regehr 的 C 语言整数知识测验
很久以前,John Regehr(https://twitter.com/johnregehr)编写了一个非常精妙的关于 C 语言整数的测验。作为未定义行为领域的杰出专家,他的这个测验着重考察了你在审计 C 代码时需要了解的知识点。很多情况下,你会遇到一些非常奇怪的场景,这些场景最终会在代码中导致可利用的漏洞。
原版测验由于 WordPress 的兼容性问题早已被下线。我取了一个存档版本,并用简单的 JavaScript 包装起来,使其能够在所有浏览器上运行。
以下是一些来自 Twitter 话题和 Reddit 的澄清说明:
- 除非另有说明,所有实现定义的行为均假设为 GCC/LLVM x86/x64 平台上的行为。
如果你喜欢这个测验,请在 Twitter 上关注 John Regehr(https://twitter.com/johnregehr)。也欢迎你关注我 Ace Pace(https://twitter.com/ace__pace)。
相似文章
用C语言搞怪,第&((int*)-8)[3]部分
一篇幽默的教育性文章,涵盖C语言基础知识,如前向声明、运算符优先级、无条件跳转和基本算术运算,并附带有意搞怪的代码示例。
C语言中无法解析整数 (2022)
文章批评了C标准库中用于解析整数的函数(atol、strtol、strtoul、sscanf),解释了为什么大部分函数存在缺陷,只有strtol在仔细进行错误处理的情况下才能正确使用。
关于整数的思考 (2023)
一篇博客文章,讨论了各种编程语言中整数类型的设计,认为 Rust 强制要求显式指定大小和符号的做法优于那些有默认 `int` 类型的语言。
我以前不知道的关于 K&R C 的一堆东西
这篇文章探讨了关于前 ANSI C(K&R C)的一些晦涩细节,包括 void 的缺失、不同的浮点类型以及简化的类型说明符规则。文章解释了该语言上下文相关语法是如何通过单遍编译器的限制来证明其合理性的。
C程序员再犯可读性罪行
2025年国际混淆C代码大赛获奖者揭晓,共有23个参赛作品,其中包括Adrian Cable的Subleq计算机模拟器,该模拟器通过单指令集架构实现软件保存。