thradams/cake

GitHub: thradams/cake

一个用 C 自举编写的 C23 编译器前端,支持将现代 C 代码转译为 C89、静态分析与跨平台编译。

Stars: 661 | Forks: 38

C 编程语言 1978 C 编程语言 第二版 1988 _C 无处不在。从操作系统到嵌入式设备,从高性能应用程序到基础技术,C 驱动着我们每天赖以生存的技术。永恒、高效且通用。_ # 关于 Cake 是一个用 C 语言从头开始编写的编译器前端,遵循 C23 语言规范及更高版本。 它作为一个实验新特性的平台,包括 C2Y 语言提案、安全增强以及诸如字面量函数和 defer 语句等扩展。 当前的后端生成兼容 C89 的代码,这些代码可以与现有或旧的编译器流水线配合以生成可执行文件。 ``` [source] ───────────► [preprocessor] ───────────► [compiler] │ ▲ └─► [cake preprocessor] ──►[cake compiler] ─┘ c89 ``` Cake 旨在通过提供高质量的[警告信息](warnings.md)和高级流程分析(包括[对象生命周期](ownership.md)检查)来增强 C 的安全性。 # Web 在线演练场 这是尝试的最佳方式。 http://cakecc.org/playground.html # 用例 注意:Cake 仍在开发中,尚未达到稳定版本。 Cake 可以作为静态分析器与其他编译器一起使用。它生成 SARIF 文件,这些文件被流行的 IDE(如 Visual Studio 和 Visual Studio Code)识别,从而提供无缝集成。 它还可以作为预处理器,将 C23 代码转换为 C89。这允许开发人员使用现代或实验性功能,同时针对尚不支持最新语言标准的编译器。 Cake 也是一个交叉编译器。例如,在 Windows 上,它可以使用 Linux 头文件并为 Linux 生成 GCC 兼容的代码,反之亦然。这使得它在开发多平台代码时非常有用。 Cake 的另一个用途是作为一个库来解析源代码并构建 AST,然后将其用于其他目的;例如,自动序列化、自动文档生成等。 # 特性 * C23 预处理器 * C23 语法分析 * C23 语义分析 * 静态[对象生命周期](ownership.md)检查 (扩展) * Sarif 输出 * 交叉编译 * C89 后端 * 样式检查器 * AST * 大量[诊断](warnings.md) # 构建 GitHub https://github.com/thradams/cake ## MSVC 构建说明 打开 Visual Studio 的开发者命令提示符。进入 *src* 目录并输入: ``` cl build.c && build ``` 这将构建 *cake.exe*,然后在 Cake 自己的源代码上运行 Cake。 ## Linux 上 GCC 的构建说明 进入 *src* 目录并输入: ``` gcc build.c -o build && ./build ``` ## Linux/Windows/MacOS 上 Clang 的构建说明 进入 *src* 目录并输入: ``` clang build.c -o build && ./build ``` ## 运行测试 在任何平台上添加 *-DTEST* 将运行大量测试。 ``` gcc -DTEST build.c -o build && ./build ``` ## Emscripten 构建说明 (Web) 需要 Emscripten https://emscripten.org/ 。 首先进行正常构建。 正常构建还会生成一个文件 *lib.c*,它是“核心库”的合并版本。 然后在 _./src_ 目录下输入: ``` call emcc -sSTACK_SIZE=8388608 -DMOCKFILES -Wno-multichar "lib.c" -o "Web\cakejs.js" -s WASM=0 -s EXPORTED_FUNCTIONS="['_CompileText']" -s EXTRA_EXPORTED_RUNTIME_METHODS="['ccall', 'cwrap']" ``` 这将生成 *\src\Web\cake.js* # 在命令行运行 Cake 确保 Cake 位于您的系统路径中。 示例 ``` cake source.c ``` 这将输出 *./platform short name/source.c* 参见[手册](manual.md) # 路线图 * 函数字面量和局部函数实现 * 使其可用作 C89 后端并进行修复 * Flow v2 算法已被推迟 # 参与 您可以通过试用 Cake、报告错误和提供反馈来做出贡献。 对 C 有建议吗? DISCORD 服务器 [https://discord.gg/YRekr2N65S](https://discord.gg/YRekr2N65S) # Cake 是如何开发的? 我使用 Visual Studio 2022 IDE 编写和调试 Cake 源代码。 Cake 使用 MSVC includes 解析自身,并在构建后生成 X\_86\_msvc 目录。 Linux 版本在 WSL 内部进行测试,macOS 版本目前测试最少,但预计可以正常工作。 # Cake 与 CFront CFront 是第一个 C++ 编译器,旨在将 C++ 源代码翻译成 C。 最初它与 C89 兼容,但随着 C 和 C++ 语言的独立发展,它出现了分歧。 Cake 保持与标准规范和 C 语言持续发展的一致性,确保完全兼容。 该编译器引入了一些扩展,在保留 C 的基本设计的同时,支持实验和对语言演进的开放贡献。 # 许可证 Cake 使用与 GCC 相同的许可证。GPLv3
标签:C23, C2Y, GCC兼容, SARIF, SOC Prime, Visual Studio, 云安全监控, 代码安全, 代码生成, 前端, 客户端加密, 嵌入式开发, 开发工具, 渗透测试工具, 漏洞枚举, 编程工具, 编译器, 自动化payload嵌入, 语法分析, 跨编译, 转译器, 远程代码执行, 逆向移植, 静态分析, 静态检查, 预处理器