Tiny C Compiler
脚本错误:没有“Message box”这个模块。 Template:NoteTA 脚本错误:没有“Infobox”这个模块。脚本错误:没有“Check for unknown parameters”这个模块。
Tiny C Compiler(缩写为TCC、tCc或TinyCC)是一个用于x86或x86-64系统的C编译器,开发者为Fabrice Bellard。软件是设计用于低阶电脑环境,或是于磁盘容量有限的空间中(1.44磁片或是硬盘)。软件可以适用于Windows、Linux、Unix操作系统,而最新版本为0.9.27(2017年12月17日)。TCC是在GNU宽通用公共许可证(LGPL)协定规范下发布。
TCC符合ANSI C(C89/C90)规范[1],亦符合新版的ISO C99标准规范和GNU C扩展的内嵌组合语言(即inline assembler)功能汇编语言。
实现状态[编辑]
- 支援C99 VLA规范
- 完全支援C89,基本符合C99规范
- 可产生make dependencies(-MD/-MF)
- 支援多种平台的目标代码生成,如:x86-64、ARM、OSX、WinCE、kFreeBSD、Hurd
特色功能[编辑]
TCC与其他C语言编译器的不同处在于:
- 容量小,软件大小约为1MB左右,可储存于1.44MB的磁盘片中使用。
- 速度快,以TCC开发的程式可执行于x86(16/32位元)与 x86-64(64位元)环境中,据开发者说,执行比GCC较来得相当快速。[2]程式亦可以包含组合语言(inline assembler)于其中执行与编译。
- 无限制,其他C语言的动态Library祗要符合ISO C99规范,皆可以给予TCC来使用与编译。
- 安全性,TCC包含一个可选的记忆体边界检查,经过检测的程式码可以随意地混合于标准程式码内。
- 其他,TCC为命令列式的使用,目前并无整合性开发环境,但可以配合其他的编辑软件使用(如:UltraEdit ...等)。
用途[编辑]
著名的 TCC 应用包括:
- TCCBOOT[3],一个可以在大约 10 秒内从源码启动 Linux内核的启动程式。该启动程式可以从硬盘中读取 Linux 源代码,将可执行指令写入内存并执行。
- TCC 曾被用于演示对软件后门的防御。 [4]
- TCC 曾被用于编译 GCC,虽然需要不少补丁才能完成这个操作。
- Cinpy[5],一个允许在Python模块中添加C函数的库。这些 C 函数在运行时使用 TCC 编译,然后通过 ctypes 库在 Python 代码中调用。
- 被安装在 JSLinux[6] ,一个能在浏览器中运行 Linux 和其它操作系统的虚拟机(也是由 Bellard 开发的)。
- 被用于编译超微型国际象棋引擎。[7]
- TCC 曾被内建于 Google Android 系统,于 Android 2.0 版本中。[8]
开发历史[编辑]
TCC 项目起源于 OTCC (Obfuscated TCC,即代码混淆过的 TCC),这是 Bellard 为赢得 2001 年国际C语言混乱代码大赛(IOCCC)编写的一个程序。其后,Bellard 反混淆并延伸发展了该程序,于是有了 TCC。[9]
在 2012 年 2 月 4 日之前的某个时间, Bellard 在 TCC 的官方网站上宣布他不再参与 TCC 的维护工作。[10]
自从 Bellard 离开 TCC 项目以来,已经有不少组织和个人分发补丁或创建维护分支,为 TCC 提供构建支持以及问题修复。
参考文献[编辑]
引用[编辑]
- ↑ Tiny C Compiler Reference Documentation (页面存档备份,存于互联网档案馆) accessed on 2008-08-07]
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling (页面存档备份,存于互联网档案馆). ACSAC.
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Bellard, Fabrice. Obfuscated Tiny C Compiler (页面存档备份,存于互联网档案馆)
- ↑ Template:Cite web
来源[编辑]
- Tiny C Compiler Reference Documentation(页面存档备份,存于互联网档案馆) accessed on 2008-08-07
- Glöckner, Daniel. Re: Tinycc-devel (no subject)(页面存档备份,存于互联网档案馆), September 8, 2006.
- a b grischka, GCC by TCC (some fixes)(页面存档备份,存于互联网档案馆), 29 Sep 2005
- Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling. ACSAC(页面存档备份,存于互联网档案馆).
- Bellard, Fabrice. Obfuscated Tiny C Compiler(页面存档备份,存于互联网档案馆)
- Bellard Fabrice Project Homepage(页面存档备份,存于互联网档案馆)
外部链接[编辑]
- Tiny C Compiler官方网站(页面存档备份,存于互联网档案馆)
- Tiny C Compiler develop archive(页面存档备份,存于互联网档案馆)
- Tiny C Compiler GIT(页面存档备份,存于互联网档案馆)
参见[编辑]
脚本错误:没有“Portal”这个模块。 Template:Sister
- Portable C Compiler(PCC)
- 脚本错误:没有“ilh”这个模块。
- 内联汇编(inline assembler)
脚本错误:没有“Navbox”这个模块。