Tiny C Compiler
Tiny C Compiler | |
Краткая справка по командам Tiny C Compiler 0.9.23.
| |
Тип | компилятор |
Разработчик | Фабрис Беллар |
Написана на | C и язык ассемблера |
ОС | GNU/Linux, Microsoft Windows |
Версия | 0.9.25 (20 мая 2009) |
Лицензия | GNU LGPL |
Сайт | http://bellard.org/tcc/ |
Tiny C Compiler (англ. Tiny C Compiler — крошечный компилятор Си), или TinyCC, или TCC — компилятор C для платформы x86.
Работает в ОС GNU/Linux и Microsoft Windows. Существуют также версии для ARM и TMS320C67xx. Распространяется по лицензии GNU LGPL.
Особенности
- От других распространённых компиляторов TCC отличается прежде всего тем, что может исполнять скомпилированную им программу, то есть выполнять функцию интерпретатора. Данное свойство позволяет использовать язык Си в качестве скриптового языка. Например, для того, чтобы запустить программу на Си в качестве скрипта в оболочке Linux, достаточно вставить в начало текста программы строку:
#!/usr/local/bin/tcc -run [1]
Также, наличие библиотеки libtcc
позволяет осуществлять динамическую генерацию кода. С помощью этой библиотеки пользователь, например, может скомпилировать строку, содержащую программу на Си, после чего получить доступ к любому глобальному символу (переменной или функции), определенному в программе.[2]
- Компактность. Исполняемый файл для процессоров x86, включающий препроцессор, компилятор, ассемблер и компоновщик, составляет всего около 100 КБ.[3]
- Возможность формировать код с контролем границ массивов, который можно беспрепятственно использовать вместе с обычным кодом.
- Возможность напрямую использовать любую динамическую библиотеку.
- Оптимизация кода ограничена вычислением константных выражений на этапе компиляции, заменой операций умножения и деления операциями сдвига где это возможно, а также некоторыми другими действиями. Оптимизация переходов не производится, так как это потребовало бы организацию промежуточного кода в более абстрактном виде.[5]
Совместимость
TCC поддерживает не только стандарт ANSI C, но и большую часть нового стандарта ISO C99 и многие расширения GNU C, включая ассемблерные вставки. TCC также имеет собственные расширения, например, представление чисел в двоичном коде (0b101
вместо 5
).[6]
История развития
TCC первоначально разрабатывался для ОС GNU/Linux, однако начиная с версии 0.9.23 (17 июня 2005) работает и в ОС Microsoft Windows.
Первый вариант TCC был разработан как Obfuscated Tiny C Compiler (OTCC). OTCC — программа, написанная Фабрисом Белларом для участия в конкурсе International Obfuscated C Code Contest (IOCCC) в 2002 году[7]. (На официальном сайте конкурса Фабрис Беллар с программой OTCC числится среди победителей конкурса за 2001 год[8].) С того времени Беллар значительно расширил функционал программы и сделал её более понятной.
Текущее состояние
На данный момент проект TCC продолжает развиваться. Существует активный список рассылки, а текущая версия от Фабриса Беллара доступна через CVS. Однако, официальная разработка TCC замедлилась в связи с занятостью Беллара в других проектах.
Rob Landley, используя Mercurial SCM, создал версию TCC, включающую различные патчи от сторонних разработчиков.
Помимо обозначенных выше существуют и другие модификации TCC и патчи для него, такие как, неофициальная коллекция патчей от Dave Dodge, патчи от Debian и kfreebsd, а также патчи для GCC от grischka.
В версии TCC 0.9.23 была обнаружена уязвимость, получившая номера CVE-2006-0635Б[9] и Open Source Vulnerability Database vulnerability 22956[10]. В отчёте было сказано, что TCC «содержит ошибку, способную вызвать проблемы с безопасностью в программах скомпилированных с его помощью. Компилятор не способен возвращать беззнаковое значение оператора sizeof
, что может привести к переполнениям целых чисел в скомпилированных объектах». Эта уязвимость была закрыта в версии 0.9.24.
См. также
На основе TCC создан загрузчик TCCBOOT (TinyCC Boot Loader) (англ.), позволяющий компилировать и загружать ядро Linux непосредственно из исходных текстов.
Ссылки
- Официальная страница TCC (англ.)
Примечания
В Википедии есть портал «Свободное программное обеспечение» |
- ↑ Tiny C Compiler Reference Documentation, 2.1 Quick start (англ.)
- ↑ Tiny C Compiler Reference Documentation, 7. The libtcc library (англ.)
- ↑ Tiny C Compiler (англ.)
- ↑ Tiny C Compiler Compilation Speed (англ.)
- ↑ Tiny C Compiler Reference Documentation, 8.8 Optimizations done (англ.)
- ↑ Tiny C Compiler Reference Documentation, 3.4 TinyCC extensions (англ.)
- ↑ Obfuscated Tiny C Compiler (англ.)
- ↑ http://www0.us.ioccc.org/years.html#2001_bellard
- ↑ CVE-2006-0635
- ↑ 22956 : Tiny C Compiler sizeof Calculation Weakness
de:Tiny C Compiler en:Tiny C Compiler fr:Tiny C Compiler pl:Tiny C Compiler
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....