“消毒剂-乐趣”

主要观点:

  • GCC 和 Clang 的 -fsanitize=undefined 标志可检测程序进入 C 语言规范中未定义或实现定义部分的地方,能捕捉到一些有用问题。
  • 支持该 sanitizer 可构建为捕获错误或调用处理程序模式,picolibc 需提供完整处理程序集。
  • 实现 sanitizer 处理程序后可运行 picolibc 测试以发现库中的问题,如避免计算越界指针等。
  • C 语言规范中左移和右移在处理有符号整数时存在问题,需进行类型转换等操作来解决。
  • 通过使用 undefined behavior sanitizer 找到了 picolibc 代码中的 8 个实际 bug。
  • 希望该工具能扩展以检测其他常见编程错误,如无符号算术溢出等。

关键信息:

  • -fsanitize=undefined 可检测未定义或实现定义行为。
  • 支持 sanitizer 有捕获错误和调用处理程序模式。
  • picolibc 需提供完整处理程序集。
  • 解决了数学代码中多种有符号整数移位问题。
  • 找到 picolibc 代码中的 8 个 bug。
  • 希望工具能检测更多编程错误。

重要细节:

  • 不同模式下 sanitizer 识别问题相同,陷阱模式插入陷阱指令,处理程序模式标记问题并调用处理函数。
  • 处理函数文档不完善,picolibc 需提供支持 gcc 和 clang 各版本的处理程序。
  • 解决的 sanitizer 问题包括避免计算越界指针、修正 PRNG 代码中的有符号算术溢出等。
  • C 语言中左移在 C99 前后对有符号整数的处理不同,右移定义更复杂。
  • 找到的 8 个 bug 包括 setlocale/newlocale 未检查 NULL 区域名等。
  • 希望工具能检测无符号算术溢出等其他常见编程错误。
阅读 26
0 条评论