Hacker News 中文摘要

RSS订阅

Lib0xc:一套用于更安全系统编程的C标准库邻近API -- Lib0xc: A set of C standard library-adjacent APIs for safer systems programming

文章摘要

微软开源了一个名为lib0xc的C语言编程库,旨在提供相对安全的C编程解决方案。该库托管在GitHub平台上,属于微软的开源项目之一。

文章总结

微软开源项目 lib0xc:提升C语言编程安全性的工具库

项目概述

lib0xc是微软推出的C语言编程工具库,旨在通过提供更安全的API替代标准库函数,降低C语言编程中的类型和边界安全问题。虽然无法在语言层面完全消除风险,但该库能显著提升现有代码的安全性。

核心目标

  1. 严格编译检查:支持-Wall -Wextra -Werror等编译选项,减少因兼容性妥协而关闭警告的情况。
  2. 低迁移成本:API设计模仿标准库函数,便于直接替换。
  3. 静态边界控制:优先支持固定大小数据结构,避免动态内存分配(除专门内存管理API外)。
  4. 兼容Clang边界安全扩展:无缝适配-fbounds-safety编译选项。
  5. 规范化实践:整合行业成熟模式,提供完善文档和测试用例。
  6. 优化API设计:通过更合理的接口设计降低误用风险。

主要组件

  • 标准库扩展0xc/std/):

    • 安全内存分配(alloc.h
    • 类型安全整数转换(int.h
    • 静态字符串处理(string.h
    • 带边界检查的格式化输出(cursor.h
  • 系统编程工具0xc/sys/):

    • 边界缓冲区封装(buff.h
    • 简化日志系统(log.h
    • 安全哈希表实现(hash.h

示例场景

  1. 安全格式化输出c char buf[256]; CURSOR cur; cbuffopen(&cur, buf, "w"); cprintf(&cur, "hello %s", "world"); // 自动跟踪剩余空间

  2. 类型安全上下文指针c struct my_state state; context_t ctx = __context_export(struct my_state *, &state); struct my_state *s = __context_import(struct my_state *, ctx); // 类型不匹配会触发错误

技术需求

  • 编译器:Clang(推荐)或GCC
  • 标准:C11(需GNU扩展)
  • 平台:macOS/Linux(x86_64/arm64)

项目结构

src/ # 跨平台源码 0xc/std/ # 标准库扩展 0xc/sys/ # 系统工具 posix/ # POSIX平台实现 0xtest/ # 测试套件

许可与贡献

  • 许可证:MIT
  • 贡献要求:需签署微软CLA协议
  • 安全漏洞报告:通过SECURITY.md流程提交

该项目通过预处理器宏和编译时检查等机制,在保持C语言灵活性的同时,为系统编程提供了更可靠的安全基础。

评论总结

总结评论内容:

  1. 对安全C编程库的支持与期待
  • 多位开发者表示将尝试使用该库(评论2,3) "I'll be studying this later tonight so I can apply it to my C projects"(评论2) "Using this standart library within restricted safe subset of C++ can be a strong opponent for Zig"(评论3)
  1. 对C/C++标准库安全性的批评与改进建议
  • 认为标准库存在大量可改进的安全问题(评论1,4) "There is so much low hanging fruit in both the C and C++ standard libraries"(评论1) "there are no good reasons we don't do this in the standards themselves"(评论4)
  1. 关于库的实际应用问题
  • 关注与现有代码的兼容性(评论9) "does this play with existing C codebases incrementally"(评论9)
  • 对微软项目不支持MSVC表示惊讶(评论10) "Interesting that a project from Microsoft doesn't support MSVC"(评论10)
  1. 对库功能的积极评价
  • 作者详细介绍库的安全特性(评论6) "lib0xc leverages GNUC extensions and C11 features to codify safer C practices"(评论6)
  • 开发者称赞其工程实用性(评论13,14) "Practical. Useful. Not sexy"(评论13) "This is great"(评论14)
  1. 其他意见
  • 对命名可能造成的混淆提出意见(评论7) "Unfortunate naming"(评论7)
  • 关注动态数组等具体功能(评论11) "anything in here for something like a 'slice'"(评论11)